Задний план
В течение многих лет я размещал все свои серверные функции, включая IIS, Apache, MySql и MSSQL, на одном экземпляре сервера, да ладно! По мере роста моей клиентской базы это приводило к постоянным тайм-аутам SQL, когда сервер был занят. За последний год я реорганизовал это в три сервера: один Windows Server 2012 для IIS + .Net 4, один экземпляр CentOS для Apache и один Windows Server 2012 только для MSSQL 2012. Все эти серверы являются виртуальными экземплярами в облаке RackSpace. , и, похоже, все работает без сбоев, за исключением одного момента ...
Раньше я привык видеть такие ошибки связи с базой данных ...
SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
или
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Я понимаю это и имел дело с ними, обычно я их больше не понимаю.
Эта проблема
То, что я получаю, - это совершенно разные ошибки тайм-аута, которые, похоже, связаны с сетью, например ...
[SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)]
и
[Win32Exception: The specified network name is no longer available]
[SqlException: A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The specified network name is no longer available.)]
и
System.ComponentModel.Win32Exception (0x80004005): The semaphore timeout period has expired
System.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)
и
System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
и
System.ComponentModel.Win32Exception (0x80004005): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Возможно, отчасти разница в том, что IIS8 выдает мне более конкретные сообщения об ошибках, чем предыдущие версии (не так ли?) ... но некоторые из этих ошибок кажутся базовыми проблемами связи между этими двумя экземплярами Windows Server 2012. Я также заметил некоторые анекдотические свидетельства того, что мой FTP-клиент периодически не может подключиться к веб-серверу, а общие сетевые ресурсы Windows периодически отключаются.
Так что я застрял в месте, где у меня есть хорошо смазанная машина, которая по необъяснимым причинам отказывает меня несколько раз в день. Поскольку я больше разработчик, чем администратор баз данных или серверный администратор ... я сбит с толку.
Мои строки подключения всегда примерно такие ...
SERVER=LiveDatabase;DATABASE=DataBaseName;UID=userid;PWD=pwd;Pooling=true;Min Pool Size=10;Max Pool Size=500;Connect Timeout=10;
где LiveDatabase - это настройка псевдонима в конфигурации собственного клиента SQL Server на машинах. Затем псевдоним указывает на локальный IP-адрес в частной сети RackSpace 192.168.x.x и нестандартный порт, к которому сервер ожидает подключения.
Эти «тайм-ауты» происходят для кажущихся случайными хранимых процедур, включая процедуры, которые имеют небольшие накладные расходы для базы данных или не имеют их вообще.
Все проблемы, похоже, указывают на проблемы с сетевым подключением, но проверка следующего должна выявить некоторые подсказки.
Проверьте и подтвердите следующее: