Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Windows Server 2008 R2 + IIS 7.5 + PHP 5.* + MSSQL
Форумы портала PHP.SU » Серверное администрирование » Администрирование Windows » Windows Server 2008 R2 + IIS 7.5 + PHP 5.* + MSSQL

Страниц (1): [1]
 

1. Taron133 - 22 Июня, 2011 - 13:46:27 - перейти к сообщению
Здравствуйте, форумчане.
Спасайте!

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
Параметры соединения:
CODE (text):
скопировать код в буфер обмена
  1. //$host = '127.0.0.1';
  2. //$host = 'localhost';
  3. //$host = '(local)\SQLEXPRESS';
  4. $host = '.\SQLEXPRESS';
  5. $bd = 'database';
  6. $rootlogin = 'login';
  7. $rootpass = 'pass';


Параметры FreeTDS:
CODE (text):
скопировать код в буфер обмена
  1. [global]
  2. host = 127.0.0.1
  3. port = 1433
  4. client charset = UTF-8
  5. tds version = 8.0
  6. text size = 20971520


Всегда использовал драйвер доступа к MSSQL 2005, 2008(без R2) FreeTDS 8.2 отсюда http://docs[dot]moodle[dot]org/20/en/Ins[dot][dot][dot]ng_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 выполнял и получал результаты запроса:
CODE (text):
скопировать код в буфер обмена
  1. SELECT id FROM table1;
  2. DELETE FROM table1 WHERE id=1;
  3. SELECT id FROM table1;

с использованием одного вызова mssql_next_result, т.е.:
CODE (text):
скопировать код в буфер обмена
  1. mssql_query
  2. mssql_fetch_array
  3. mssql_next_result
  4. mssql_fetch_array

то при использовании SQLSRV приходится использовать последовательность:
CODE (text):
скопировать код в буфер обмена
  1. sqlsrv_query
  2. sqlsrv_fetch_array
  3. sqlsrv_next_stmt
  4. sqlsrv_next_stmt
  5. sqlsrv_fetch_array

т.к. появляется affected_rows и их можно получить с помощью sqlsrv_num_rows, НО если конструкция гораздо сложнее, т.е. есть курсоры и используется T-SQL и к тому же громадный проект, то возникает вопрос:
Каким образом можно убрать подобные вещи или свести их к случаю как в старой библиотеке?
Были попытки использовать опцию MultipleActiveResultSets в sqlsrv_connect, но это ни к чему не привело.

Я находил такой ответ:
использовать перед каждым запросом
CODE (text):
скопировать код в буфер обмена
  1. SET NOCOUNT ON

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

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

 

Powered by ExBB FM 1.0 RC1