Вопрос

Я создаю сайт, который работает нормально в течение нескольких часов, но затем время ожидания вызовов *.asmx и *.ashx истекает.

Исключением является:«Тайм-аут истек.Срок ожидания истек до получения соединения из пула. Это могло произойти из-за того, что все соединения в пуле использовались и был достигнут максимальный размер пула».

В качестве ORM я использую SubSonic.

Я подозреваю, что проблема связана с запланированным заданием, которое запускается каждые несколько минут и обращается к базе данных.Когда я смотрю в «Текущую активность» SQL Server 2000, я вижу:

  • 100 процессов со статусом «спящий»
  • 100 замков

100 процессов взяты из приложения «Поставщик данных .Net SqlClient», а команда — «ОЖИДАНИЕ КОМАНДЫ».

Так что я предполагаю, что проблема в этом..но как мне устранить неполадку?Похоже ли это на состояние тупика в базе данных?Как только я

c:\> iisrestart

, все в порядке (какое-то время).

Спасибо. Я просто никогда не сталкивался с чем-то подобным и не знаю, как лучше поступить.

Майкл

Это было полезно?

Решение

Это может быть дубликат этой проблемы - Правильно ли работает пул соединений в Subsonic?

Если вы загружаете объекты с помощью Load() вместо LoadAndCloseReader(), каждое соединение останется открытым, и в конечном итоге вы исчерпаете пул соединений.

Другие советы

Когда вы вызываете Load() для коллекции, Reader остается открытым — обязательно вызывайте LoadAndCloseReader(), если вы хотите, чтобы Reader закрылся, — или используйте блок using.

Также полезно иметь исходный код.

Я ничего не знаю о Subsonic, но, может быть, вы сливаете «контексты» базы данных?Я бы проверил, удаляется ли любой ресурс базы данных после того, как вы закончите с ним...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top