Мы наблюдаем эту проблему уже некоторое время, и я действительно пытаюсь понять, что ее вызывает.
Пару раз в день мы будем видеть периоды, когда веб-страницы начинают генерировать сообщение «[Microsoft] [Драйвер ODBC SQL Server] Истекло время ожидания», а вскоре после этого страницы начинают генерировать «[Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] SQL Server» не существует или доступ запрещен ".
У нас есть много разных приложений, которые подключаются к этому серверу базы данных. В среднем он обрабатывает около 2500 одновременных подключений в среднем 10 000 транзакций в секунду. У большинства наших приложений нет никаких проблем, кажется, что проблемы возникают только на веб-сервере. (Возможно, это связано с пулом соединений?)
Я не уверен, к чему приписать эту проблему. Рассматриваемый сервер SQL значительно превосходит работу, которую он выполняет, и оснащен лицензированием для каждого процессора. Так что я не думаю, что мы рассматриваем вопрос лицензирования / производительности.
Я подумал, что, возможно, возникла проблема с IP-подключением, поэтому я изменил ConnectionString, чтобы использовать IP-адрес, и выполнил несколько длительных эхо-запросов. Я получил 0 пакетов, потерянных между веб-сервером и сервером базы данных.
Строка подключения ASP теперь выглядит так:
Provider=MSDASQL; Driver={SQL Server}; Server=10.0.100.100; Database=DBName; UID=WebUserName; PWD=WebUserPassword; ConnectionTimeout=15; CommandTimeout=120;
Пользователь не является пользователем домена, подключающимся с использованием аутентификации Sql Server. Так что я не думаю, что это проблема домена. Я проверил файлы журналов SQL-сервера и не нашел ничего, соответствующего инцидентам.
Я нашел другой вопрос о стеке, описывающий аналогичное поведение, но без разрешения.
Подробности:
- Веб-сервер: Windows 2003 Standard SP2, IIS 6.
- Сервер базы данных: Microsoft SQL Server 9.0.4035
Кто-нибудь видел / решал проблему такого типа? Есть ли у кого-нибудь предложения относительно того, где я должен искать дальше?
Спасибо!
-Зорлак
ИЗМЕНИТЬ
Может ли кто-нибудь сказать мне, как лучше всего выполнять sql-запросы в классическом высоконагруженном asp? Хотим ли мы попробовать использовать пул соединений?
Глядя на код, довольно много выглядит так:
Set objCn = Server.CreateObject("ADODB.Connection")
objCn.Open(Application("RoConnStr"))
'do some stuff
objCn.Close
Set objCn = Nothing
Решение (по совету ScottE)
Эта статья описана для тройник, моя проблема. Я внес изменения в реестр, а затем перезагрузил сервер.
Проблема решена!