2011-01-17 2 views
1

У меня проблема с службой Windows, которая обращается к базе данных SqlServer 2005. Каждый понедельник он вылетает с InvalidOperationException: время ожидания истекло. Период ожидания истекает до получения соединения из пула. Возможно, это произошло из-за того, что все объединенные соединения использовались и максимальный размер пула был достигнут.Что может вызвать InvalidOperationException: максимальный размер пула, за исключением очевидного

Я проверил все очевидные вещи, такие как закрытие соединений и считывателей db, и не обнаружил никаких проблем.

Самое странное, что в последнем случае я установил перфектный монитор для записи количества подключений в пуле и тому подобное, и обнаружил, что сервер Sql фактически опустился за несколько дней до сбоя службы, поэтому все счетчики SQL показали 0 (служба обрабатывает SQL Server, останавливаясь и пытается подключиться каждые несколько секунд, пока он не восстановится успешно).

До того, как сервер SQL был остановлен, количество открытых подключений было равно 1-2, поэтому, по-видимому, это не проблема с количеством подключений.

Я буду исследовать журналы SQL Server для подсказок, но, возможно, вы можете дать мне представление о том, что может вызвать это исключение, если фактическое количество соединений не является проблемой.

Update:

Проверил журналы и, кажется, что Sql Server не вниз все время. В четверг он был остановлен, но был перезапущен в пятницу. Перезапуск заставил SQL-счетчики в режиме перманентного прекратить передачу данных, поэтому у меня нет реальных данных о количестве подключений во время сбоя.

ответ

1

В конце концов Google помог мне найти решение для этого. В соответствии с этим blog это исключение может возникнуть, когда два или более потока попытаются получить доступ к экземпляру не отвечающего SQL-сервера одновременно. Достаточно обернуть вызов conn.Open() в блокировку, и ошибка исчезла. Bizarre, но работает.

0

Есть ли какое-то обслуживание, которое было запланировано на ночь до понедельника? Это может быть причиной таких ошибок.

+0

Время, в течение которого у меня есть перманентные счетчики mon, все SQL-счетчики останавливаются в прошлый четверг. Я жду журналов SQL, но кажется, что именно тогда сервер sql был остановлен (по моему мнению, для maintanance). –

1

То, что я думаю, было то, что Адо поставил в очередь запрос на соединение (потому что, вероятно, служба SQL READER не была остановлена ​​с помощью собственного провайдера), и когда SQL Server снова загрузился, он отправил весь этот запрос ему в это время. Именно это и вызвало исключение операции Invalid. Поставщик Sqlserver делает такие вещи (в первую очередь это его ответственность за управление соединениями, а не с SQL-серверами)

Что вы должны делать Dro - это проверить код, работает ли служба Sql. U может легко использовать WMI для этого или SQL SMO. Что-то вроде 3 строк кода, и все готово.

Люк

+0

Могу ли я сделать это, если SQL Serv находится на другой машине? –

+0

YEa, если WMI настроен для этого (особенно с WS 2003 и 2008). USE Service Controller класс с MSSQL $ InstanceName и проверьте свойство status. Это должно сделать это – luckyluke

+0

См. Обновление о том, почему я думаю, что это не так - кажется, что служба работала в течение 2 дней после перезапуска Sql. –

Смежные вопросы