У нас есть рабочий веб-сайт, на котором возникают периодические ошибки подключения к нашему серверу SQL 2005, несколько раз в день во время пиковой нагрузки:
Произошла ошибка при установлении соединения с сервером. При подключении к SQL Server 2005 этот сбой может быть вызван тем, что в настройках по умолчанию SQL Server не разрешает удаленные подключения. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)
Мы, конечно, изучаем другие возможности, но пока мы не видели ничего необычного на стороне SQL. Нам интересно, может ли это быть проблемой именованных каналов, или мы увидим то же самое, если заставим веб-сервер использовать вместо этого TCP / IP. Итак, мои вопросы:
Если это происходит только в часы пик и другие попытки подключения из того же приложения работают нормально, возможно, вы столкнулись с конфликтом памяти на сервере SQL или проблемой тайм-аута.
Обычно именованные каналы хороши для LAN-коммуникаций или других быстрых, стабильных сетей, но они немного болтаются (т. Е. Больше накладных расходов), чем сокеты TCIP / IP, поэтому не обязательно подходят для более медленных соединений, таких как WAN.
Когда вы говорите, что каждый сервер изолирован в своей собственной DMZ, вы имеете в виду, что у вас несколько сетей DMZ, и каждый сервер находится в другом? Если это так, попросите вашу команду в Интернете проверить журналы брандмауэра на наличие сброшенных / отклоненных / неудачных соединений. Если ваши серверы находятся в разных подсетях, вы можете установить TCP / IP в качестве предпочтительного протокола.
Вот пара статей, в которых рассказывается о различиях в протоколах:
Обычно мы используем только TCP / IP в наших строках подключения (с номером порта не по умолчанию) и не имеем проблем с масштабируемостью как для локальных, так и для WAN-серверов.
Вы можете ПРИНУДИТЕЛЬНО использовать соединение для использования TCP / IP, используя server = dbservername, 1433 в строке соединения (т.е. указав номер порта).
Обычно мы оставляем именованные каналы открытыми, поскольку это позволяет видеть в SQL Management Studio индикатор состояния сервера «Зеленый» / «Красный».
Я бы посмотрел на общее состояние сервера, особенно на сетевую нагрузку (соединения / коллизии) и использование ОЗУ (счетчики SQL Server PerfMon). Иногда у вас могут возникнуть проблемы с объединением / освобождением соединений на очень загруженных серверах (обычно при 1000 соединений в секунду).