Windows Server 2008 R2 + IIS 7.5 + PHP 5.* + MSSQL, Таймаут при mssql_connect FreeTDS

Taron133

Новичок
Здравствуйте, форумчане.
Спасайте!

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
Параметры соединения:
Код:
//$host = '127.0.0.1';
//$host = 'localhost';
//$host = '(local)\SQLEXPRESS';
$host = '.\SQLEXPRESS';
$bd = 'database';
$rootlogin = 'login';
$rootpass = 'pass';
Параметры FreeTDS:
Код:
[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 выполнял и получал результаты запроса:
Код:
SELECT id FROM table1;
DELETE FROM table1 WHERE id=1;
SELECT id FROM table1;
с использованием одного вызова mssql_next_result, т.е.:
Код:
mssql_query
mssql_fetch_array
mssql_next_result
mssql_fetch_array
то при использовании SQLSRV приходится использовать последовательность:
Код:
sqlsrv_query
sqlsrv_fetch_array
sqlsrv_next_stmt
sqlsrv_next_stmt
sqlsrv_fetch_array
т.к. появляется affected_rows и их можно получить с помощью sqlsrv_num_rows, НО если конструкция гораздо сложнее, т.е. есть курсоры и используется T-SQL и к тому же громадный проект, то возникает вопрос:
Каким образом можно убрать подобные вещи или свести их к случаю как в старой библиотеке?
Были попытки использовать опцию MultipleActiveResultSets в sqlsrv_connect, но это ни к чему не привело.

Я находил такой ответ:
использовать перед каждым запросом
Код:
SET NOCOUNT ON
Но при этом невозможно получить sqlsrv_num_rows для 2ой и далее выборки(SELECT), что не допустимо.

Спасибо за то, что хотя бы прочитали до конца.
 
Сверху