Здравствуйте, форумчане. Спасайте! 1 Вопрос Конфигурация сервера №1: Windows Server 2008 R2 + IIS 7.5 + PHP (5.2.17, 5.3.6, 5.3.7RC1)(FastCGI) + MSSQL 2008 R2 Сервер нулёвый(сразу после установки хостером) без мусора, только обновления. Установлены все последние обновления на 22.06.2011 Параметры соединения: Код (Text): //$host = '127.0.0.1'; //$host = 'localhost'; //$host = '(local)\SQLEXPRESS'; $host = '.\SQLEXPRESS'; $bd = 'database'; $rootlogin = 'login'; $rootpass = 'pass'; Параметры FreeTDS: Код (Text): [global] host = 127.0.0.1 port = 1433 client charset = UTF-8 tds version = 8.0 text size = 20971520 Всегда использовал драйвер доступа к MSSQL 2005, 2008(без R2) FreeTDS 8.2 отсюда http://docs.moodle.org/20/en/Installing_MSSQL_for_PHP Всегда драйвер работал быстро и без нареканий почти. Последняя удачная конфигурация (№2) была и есть: Windows Server 2008 + IIS 7.0 + PHP 5.3.6(FastCGI) + MSSQL 2008 + FreeTDS_8.2_NTS_VC9 Проблема: на конф.№2 функция mssql_connect работала за доли миллисекунд, а в конф. №1 происходит резкое замедление до всегда почти одинаковой цифры 4.5-4.9 секунд, что не приемлемо естественно. Пробовал использовать драйвер SQLSRV 2.0(от Майкрософта), соединение происходит за 0.0001-0.01 сек., что относительно неплохо. Так что грешить на загрузку системы в целом не приходится, да и нет этой загрузки. Вопрос: Что именно на это может влиять? Был ли у кого такой косяк и как с ним справились? 2 Вопрос С горяча уже начал пробовать пути к отступлению. Когда пробовал использовать драйвер SQLSRV 2.0(от Майкрософта), то наткнулся на один плохой пункт. При использовании FreeTDS mssql_query выполнял и получал результаты запроса: Код (Text): SELECT id FROM table1; DELETE FROM table1 WHERE id=1; SELECT id FROM table1; с использованием одного вызова mssql_next_result, т.е.: Код (Text): mssql_query mssql_fetch_array mssql_next_result mssql_fetch_array то при использовании SQLSRV приходится использовать последовательность: Код (Text): sqlsrv_query sqlsrv_fetch_array sqlsrv_next_stmt sqlsrv_next_stmt sqlsrv_fetch_array т.к. появляется affected_rows и их можно получить с помощью sqlsrv_num_rows, НО если конструкция гораздо сложнее, т.е. есть курсоры и используется T-SQL и к тому же громадный проект, то возникает вопрос: Каким образом можно убрать подобные вещи или свести их к случаю как в старой библиотеке? Были попытки использовать опцию MultipleActiveResultSets в sqlsrv_connect, но это ни к чему не привело. Спасибо за то, что хотя бы прочитали до конца.
Неожиданно для себя нашёл ответ на 2ой вопрос использовать перед каждым запросом Код (Text): SET NOCOUNT ON Но при этом невозможно получить sqlsrv_num_rows для 2ой и далее выборки(SELECT), что тоже не допустимо, так что вопрос актуален! Хотя это не самая лучшая затея, может есть лучше?