2017-02-07 4 views
0

Мы получаем следующую ошибку в нашем WCF application.C#: Корневая причина максимального размера пула достигнута

Истек срок истекло. Период ожидания истекает до получения соединения из пула. Возможно, это произошло из-за того, что все объединенные соединения использовались, и был достигнут максимальный размер пула.

Когда мы получили ошибку в то время, когда приложение полностью использовало 24 соединения, и я думаю, что 100 - это размер пула соединений по умолчанию.

Мы всегда закрываем SQL connection, а также предоставляем SQLDataReader.

Я не уверен, почему это исполнение произошло. Есть ли другая ситуация, когда мы получаем эту ошибку?

+0

Все одноразовые объекты должны быть расположены не только SqlDataReader, но, самое главное, SqlConnection. Используйте инструкцию _using вокруг этих типов объектов, чтобы получить правильную обработку их. – Steve

+0

@Steve. Да, мы используем инструкцию «using» для обработки соединения и команды SQL и т. Д. – Girish

+0

. Мне кажется, вам нужно больше узнать о вашем сервисе и посмотреть, вы не пропустили метод .Dispose() или оператор using где-нибудь на вашем коде. Иногда это всего лишь небольшая петля, которая может вызвать проблему. –

ответ

0

У меня есть несколько предложений.

  1. Выполнить правильно все соединения внутри using блоков, чтобы закрыть/распоряжаться соединения (как вы сказали, это уже сделано)
  2. Проверьте, какой пользователь/машины, сохраняя открытые соединения. Выполнить этот запрос, чтобы определить идентификатор базы данных:

select distinct dbid, DB_NAME(dbid) FROM sys.sysprocesses where dbid > 0

Затем используйте этот запрос, чтобы проверить все открытые соединения, заменив DBID:

SELECT dbid, DB_NAME(dbid) as DatabaseName, COUNT(dbid) as ConnectionCount, loginame as LoginName 
    FROM sys.sysprocesses 
WHERE dbid = 1 
GROUP BY dbid, loginame 
ORDER BY count(dbid) desc 

Это может дать вам некоторые подсказки о том, кто поддерживает слишком много связей.

  1. Внедрение пула в строку соединения для ограничения соединений. Используйте это в строке подключения приложения:

Pooling=true; Min Pool Size=1; Max Pool Size=5

Я надеюсь, что это может помочь вам.

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