За последние 24 часа нас посетили 16889 программистов и 1291 робот. Сейчас ищут 1490 программистов ...

Windows Server 2008 R2 + IIS 7.5 + PHP 5.* + MSSQL 2008 R2

Тема в разделе "MSSQL", создана пользователем Taron133, 22 июн 2011.

  1. Taron133

    Taron133 Активный пользователь

    С нами с:
    22 июн 2011
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, форумчане.
    Спасайте!

    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):
    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:
    Код (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.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):
    1. SELECT id FROM table1;
    2. DELETE FROM table1 WHERE id=1;
    3. SELECT id FROM table1;
    с использованием одного вызова mssql_next_result, т.е.:
    Код (Text):
    1. mssql_query
    2. mssql_fetch_array
    3. mssql_next_result
    4. mssql_fetch_array
    то при использовании SQLSRV приходится использовать последовательность:
    Код (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, но это ни к чему не привело.

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

    Taron133 Активный пользователь

    С нами с:
    22 июн 2011
    Сообщения:
    2
    Симпатии:
    0
    Неожиданно для себя нашёл ответ на 2ой вопрос
    использовать перед каждым запросом
    Код (Text):
    1. SET NOCOUNT ON
    Но при этом невозможно получить sqlsrv_num_rows для 2ой и далее выборки(SELECT), что тоже не допустимо, так что вопрос актуален!
    Хотя это не самая лучшая затея, может есть лучше?