Я пытаюсь выяснить причину увеличения числа исключений в производственной среде, связанных с пулом соединений ADO.NET, я вижу в журнале множество исключений такого рода:
Истекло время ожидания.Время ожидания истекло до получения соединения из пула.Это могло произойти из-за того, что все пулы соединений использовались и был достигнут максимальный размер пула.
Первое, что я попробовал, было убедиться, что все соединения закрыты и удалены.Для этого мы изменили все подключения к базе данных на:
try
{
oConnection.Open();
//do something
}
catch()
{
}
finally
{
if (oConnection.State != ConnectionState.Closed)
{
oConnection.Close();
oConnection.Dispose();
}
}
Я использую следующую строку подключения:
server=databaseserver;Database=databasename;User Id=username;Password=password;Max Pool Size=600;Min Pool Size=50;Connection Timeout=180;Pooling=true
В Performance Manager, поставщик данных .NET для SqlServer, я могуобратите внимание, что NumberOfPooledConnections и NumberOfActivePooledConnections всегда ниже максимального размера пула строки подключения, всегда между 60 и 90 соединениями.
Кто-нибудь знает, как это возможно?Я получаю исключение, что в пуле нет соединений, но я вижу, что пул не заполнен.
Моя среда:
- Windows Server 2003 Enterprise SP2 (со всеми последними исправлениями)
- IIS 6.0 (с 4 рабочими процессами в веб-саду и пуле приложений каждые 60 минут перезагружаются)
- SQL Server 2005
Может кто-нибудь помочьмне