Как ускорить mssql_connect () - PullRequest
       13

Как ускорить mssql_connect ()

3 голосов
/ 17 февраля 2010

Я работаю над проектом, в котором диалоговая система PHP взаимодействует с Microsoft SQL Server 2008, и мне нужно больше скорости на стороне PHP.

После профилирования моих PHP-скриптов я обнаружил, что вызову mssql_connect () требуется около 200 миллисекунд в этой конкретной системе. Для некоторых простых диалогов это составляет около 60% всего времени выполнения скрипта. Так что я мог бы значительно повысить производительность, ускорив этот вызов.

Я уже заверил, что для каждого запроса к моим PHP-скриптам создается только один дескриптор соединения.

Есть ли способ ускорить начальное соединение с SQL Server? Однако применяются некоторые ограничения:

  • Я не могу использовать PDO (здесь много устаревшего кода, который не будет работать с ним)
  • У меня нет доступа к конфигурации SQL Server, поэтому мне нужно решение на стороне PHP
  • Я не могу перейти на PHP 5.3.X, опять же из-за дрянного устаревшего кода.

Ответы [ 3 ]

3 голосов
/ 19 ноября 2012

В последнее время мы проходили небольшую оптимизацию между php 5.3, FreeTDS и mssql. Предполагая, что у вас есть достаточные ресурсы сервера, мы обнаружили, что два изменения сделали взаимодействие с базой данных намного быстрее и намного более надежным.

  1. Использование mssql_pconnect () вместо mssql_connect () исключило периодически возникающая проблема «не удается подключиться к серверу». Я прочитал много постов что указывало на негативные проблемы, связанные с постоянными связи, но до сих пор мы не видели ничего, чтобы предположить, что это проблема. PHP-сервер, кажется, сохраняет от 20 до 60 постоянных соединения открываются с сервером БД в зависимости от нагрузки.
  2. Использование IP-адреса сервера базы данных в файле freetds.conf вместо имени хоста также предоставлено увеличение скорости.
3 голосов
/ 17 февраля 2010

Hm. Я не знаю много о MS SQL, но оптимизация этого единственного вызова может быть трудной.

Одна вещь, которая приходит на ум, это попытка mssql_pconnect () , конечно:

Во-первых, при подключении функция сначала пытается найти (постоянную) ссылку, которая уже открыта с тем же хостом, именем пользователя и паролем. Если он найден, вместо открытия нового соединения будет возвращен идентификатор для него.

Но вы, наверное, уже думали об этом.

Во-вторых, вы не говорите, работает ли MS SQL на той же машине, что и PHP-часть, но если это не так, может быть, есть под рукой основная проблема с сетью? Как быстро классическая ping между одним хостом и другим? То же самое относится и к виртуальной машине, которая не настроена идеально. 200 миллисекунд действительно звучат очень, очень медленно.

Затем в комментариях пользователя к mssql_connect () есть разговоры о собственном драйвере PHP для MS SQL. Я ничего не знаю об этом, будет ли он соответствовать «старому» синтаксису и применим ли он в вашей ситуации, но это может стоить посмотреть.

Пользовательские заметки всегда стоит посмотреть, здесь есть лакомые кусочки, вроде этот :

На всякий случай это помогает людям здесь ... Мы работали рваные из-за крайне медленных подключений из IIS6 -> SQL Server 2000. Переключение с CGI на ISAPI несколько исправило это, но первоначальное подключение все равно приняло 10 секунд, и в конце концов соединения не будут работать.

Решением было добавить IP-адрес сервера базы данных в файл HOST на сервере, указав его имя внутреннего компьютера. Похоже, что какой-то поиск DNS был виновником.

Теперь связи и запросы летят, и мир снова прав.

1 голос
/ 17 февраля 2010

Единственное, о чем я мог подумать, - это использовать IP-адрес вместо имени хоста для соединения SQL, чтобы сэкономить на поиске DNS. Может быть, постоянные соединения являются опцией и немного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...