Назад | Перейти на главную страницу

Как сбросить пул соединений в Azure (ошибка: достигнут максимальный размер пула)?

На своем веб-сайте Azure я получаю следующую ошибку и пытаюсь ее исправить:

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.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: 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.

Как мне сбросить пул или увеличить его?

Вы можете увеличить пул подключений SQL в Azure так же, как и в любой другой базе данных. По умолчанию вы получаете 100 подключений. Если у вас не так много пользователей в вашей системе, вы можете проверить, закрываете ли вы / удаляете соединения, когда они больше не используются.

connectionString="Server=XXX;Database=XXX;User Id=XXX;password=XXX;
    connection timeout=0;Max Pool Size = 500;Pooling = True"

Настройте конфигурацию строки подключения, например Max Pool Size = 500; в web.config, чтобы соответствовать максимальному количеству подключений к текущему уровню базы данных SQL Azure

Дополнительные сведения об ограничениях ресурсов каждого уровня SQL Azure: https://azure.microsoft.com/en-us/documentation/articles/sql-database-resource-limits/

Вы можете запустить команду запуска, чтобы изменить тайм-аут простоя пула приложений. Запустите что-то вроде этого из cmd-файла, вызываемого из задачи запуска (в этом примере отключен тайм-аут):

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

Используя аналогичную технику, вы можете повторно использовать пул приложений после достижения определенного порога памяти (см. Эта статья)

SqlConnection.ClearAllPools (); Добавьте это перед открытием нового соединения с базой данных.