Я ненавижу даже поднимать это, потому что есть так много сотен страниц, говорящих об этой ошибке, датируемой 7-8 лет ... Однако, я не могу понять это.
У меня есть служба отчетов, работающая на сервере A, которая подключается к SQL Server 2008 R2 на сервере B. Оба сервера работают под управлением Windows Server 2008. Служба отчетов является многопоточной и запускает до 10 отчетов одновременно на каждом собственная тема.
Моя строка подключения выглядит следующим образом:
Data Source=ServerB;Initial Catalog=DBName;trusted_connection=YES;Connection Timeout=0;Max Pool Size=500;
Как видите, я установил тайм-аут соединения на 0, чтобы ждать подключения, пока оно не станет доступным, и максимальный размер пула - 500 б / с. Я хотел убедиться, что пул не слишком мал для моей многопоточной службы. , Ошибка обычно появляется только при запуске службы, и существует очередь отчетов, ожидающих обработки.
Так что, очевидно, первое, что нужно сделать, это найти утечки соединений ... должны быть соединения, которые не закрываются, которые вызывают заполнение пула, верно? Нет, похоже, бассейн никогда не наполняется.
Последние несколько часов я провёл Performance Monitor на сервере, наблюдая за «Поставщиком данных .NET для SqlServer», и NumberOfPooledConnections никогда не превышал 20 или около того. У меня также есть perfmon, работающий на сервере SQL, который просматривает «SQLServer: Общая статистика», а UserConnections никогда не превышает 50. В течение этого времени я вызывал сообщение об этой ошибке 2 или 3 раза, перезапуская службу вручную.
Что еще я могу найти? Что еще может вызвать эту ошибку?
Полное сообщение об ошибке:
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.
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
Спасибо,
Стивен