MTW.RU call-center: (495) 729-57-34, 8-800-200-00-97
support: (495) 737-56-80
 
      Сервер технической поддержки
Справочная информация:
FAQ (частые вопросы)
Графические инструкции
Видео уроки
Вопросы бухгалтерии
Web-интерфейсы:
FTP-менеджер
Работа с базой MySQL — phpMyAdmin
Работа с базой MSSQL — enterprise manager
Работа с почтой — web e-mail

Часто задаваемые Вопросы -> Работа со скриптами (ASP, ASP.NET) Windows

Я программирую под ASP.NET и при запуске приложения или скрипта очень часто возникает ошибка:
Server Error in '/' Application.
--------------------------------------------------------------------------------
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.
--------------------------------------------------------
Как можно разершить данную ситуацию?
Данная ошибка очень часто возникает при написании скриптов для обращения к базе данных. Так как подключение к базе данных и работа с ней давольно ресурсоемкий процесс, поэтому для улучшения производительности используется система переназначения существующих соединений для запросов к базе данных (pool manager).

Pool manager содержит некоторое число ( по умолчанию установлено 100 ) пулов для соединения с базой. Когда приходит новый запрос, manager проверяет наличие свободных для нового соединения пулов и подключает если это возможно. В ситуации когда все пулы заняты, но предел буфера не достигнут, создается новый пул. В том случае когда достигается максимальный размер буфера и нет свободных пулов, соединение отвергается до тех пор, пока не освободится место для нового подключения, и выдается ошибка :

"all pooled connections were in use and max pool size was reached".

Максимальное количество пулов можно задать самостоятельно в зависимости от потребностей, большинство сайтов использует не более 40. Также можно установить минимальное число пулов. По умолчанию 0, можно ставить больше, к примеру 4. Это используется для того, при большом простое не ожидать пока произойдет новое подключение к базе, а просто использовать старый пул. Для увеличения производительности можно применять параметр connetction timeout - этот параметр отвечает за время простоя соединения в конкретном пуле.

Самая распространенная проблема заключается в том, что скрипт после обращения к базе, не закрывает коннекта к ней. Для примера в ADO, ADO.NET необходимо в ручную закрывать соединение после завершения запроса. Более подробную информацию, а также примы кода, корректирующие скрипт для избежания перполнение пулов можно посмотреть перейдя по ссылке:

Tuning Up ADO.NET Connection Pooling in ASP.NET Applications.


Copyright © 1998-2010 ООО "МедиаСофт Эксперт" 105122, г.Москва, Щелковское ш. д.2
Отдел по работе с абонентами: +7 (495) 729-5734, 737-5685, info@mtw.ru Отдел технической поддержки: +7 (495) 737-5680, support@mtw.ru