Низкая производительность связки PHP+MSSQL

4m@t!c

Александр
Низкая производительность связки PHP+MSSQL

Конфигурация.
Есть два сервера. Оба под управлением Windows.
На одном из серверов установлен MSSQL 2000. На втором работает связка Apache2.2+PHP5.2.2+MySQL5. Для связи с СУБД используется API из стандартной библиотеки php_mssql.dll. Соединение идет по TCP/IP.

Логика работы приложения.
Логика достаточно специфическая. Идет интеграция двух продуктов. Один на MSSQL, второй на MySQL. В БД MySQL хрнится техническая информация о продуктах, в MSSQL - коммерческая.

Из MySQL выбираются основные данные с помощью одного запроса, а в MSSQL выбираются вторичные данные путем отправки простейших процедур. Процедуры запрашиваются в цикле и их количество варьируется от 10 до 20 штук. На клиенте полученная информация окончательно обрабатывается и формируется массив, которые отправляется ф функцию представления документа.

Проблема.
Процедура отправляется с помощью функции mssql_query(). На отправку запроса и получение идентификатора результата уходит 2-5 секунд - это достаточно много. Если помножить на количество отправляемых запросов процедур, то получаем 20-100 секунд. Что при генерации обычной HTML страницы - огромный интервал времени.

Если повторно вызвать скрипт с одинаковыми параметрами, то, скорость выполнения скрипта увеличивается в разы. Т.е. такое впечатление, что идет кеширование.

Если вызывать процедуру с помощью MSSQL Query Analizer, то время выполнения процедуры исчисляется сотыми доли секунды. Т.е. кеширование результат запроса сервера отпадает.

Как пробовал решить проблему.
Естественно, полез в ман. Какой-то специфической информации по настройке связки PHP+MSSQL не нашел.

Потом решил попробовать выполнять процедуры с помощью mssql_execute(). Эффект тот же. Более того сравнил скорость работы mssql_query(), mssql_execute() и odbc_exec(). Быстрее всех отрабатывает mssql_query(), чуть медленнее (20-30%) mssql_execute(), ну и в разы медленнее odbc_exec().

В тесте я в цикле вызывал процедуру MSSQL. Так вот иногда первый цикл выполнялся дольше, чем остальные. Причем, дольше в разы.

Гугиление по словам optimization, performance ничего вразумительного не дали. Поиск по форуму - тоже.

Пробовал изменять сетевой алиас сервера с MSSQL на его IP - первые несколько запросов отработали достаточно быстро, но, затем опять все работает очень медленно.

Вопрос.
Если у кого были подобные проблемы - поделитесь опытом решения. Или, возможно, я где-то туплю, то подскажите - где? Куда рыть?
 

atv

Новичок
Попробуй , может, через драйвер PDO, мало ли какой результат будет.

Может проблема в сетевых настройках? Винда с повышенным уровнем безопасности может долго устанавливать соединение, и там тоже используется кеширование, точнее таймаут соединения.

Ну и проверь авторизацию на самом MSSQL. Может там какие-то повышенные настройки безопастности.
 

4m@t!c

Александр
Результат использования PDO - аналогичный предыдущим вариантам.

Не могу понять, что кешируется, почему и как это устранить.

Господа, хоть какие идеи есть?
 
Сверху