#php #sql-server
#php #sql-сервер
Вопрос:
Я использую PHP версии 5.3.22 на IIS7. У меня есть запрос, который мне нужно выполнить для 220 удаленных серверных баз данных MSSQL. Работал отлично, пока я не достиг 30-секундного ограничения времени ожидания. Я исключил серверы с самыми медленными соединениями, и это дает мне еще несколько результатов.
Я перебираю: подключаюсь к серверу, запрашиваю, повторяю результаты (от 6 до 12 записей), отключаюсь, переключаюсь на следующий сервер, повторяю.
Я скорректировал и обнаружил, что
ini_set( "max_execution_time", 60)
кажется наиболее последовательным, который не выдает ошибку 500.
Что еще я могу проверить? Или я просто делаю это неправильно?
Комментарии:
1. просто: не запускайте этот скрипт под веб-сервером. Это время ожидания существует не просто так. Для такого рода задач вы должны запускать сканирование как отдельный скрипт (например
system('scan.php amp;')
, а затем периодически проверять ход сканирования. PHP командной строки по умолчанию не подвержен тайм-аутам.2. В дополнение к комментариям @MarcB выше, вы также можете рассмотреть некоторый уровень распараллеливания при выполнении этой работы. Вы можете разветвлять несколько процессов и выполнять эту работу намного быстрее (очевидно, у вас будут ограничения на системные ресурсы, доступные для запуска параллельных процессов).
3. Исходя из того, что сказал @MarcB, настройте запланированную задачу, чтобы время от времени извлекать эти данные и заполнять локальную таблицу. Теперь ваши пользователи могут запрашивать данные мгновенно. Обязательно укажите
Data last updated: DATETIME
примечание, чтобы люди понимали, что это не данные в реальном времени