Необходимо устранить утечки соединения . Если причиной истощения пула является утечка, увеличение его до 300 просто задержит неизбежное. Если вы пропускаете одно соединение за 10000 вызовов (т. Е. «Очень редко»), и у вас есть 110 одновременных запросов, скажем, за 5 секунд вызова, вы пропускаете со скоростью около одного соединения каждые 8 минут, что приводит к истощению пула в сети. 13 часов Хотя тайм-ауты начнут появляться намного раньше, так как доступный размер пула сократится.
Если у вас есть веские доказательства того, что причина не в утечках, а в том, что количество вызовов зависит от размера пула, вам следует увеличить размер пула. Независимо от размера пула, который вы решите использовать, если ваши запросы требуют соединения 1: 1 для всей продолжительности запросов, вам нужно ограничить / поставить в очередь HTTP, чтобы он не превышал размер пула. Если нет, вы все равно можете столкнуться с шипами, которые истощают бассейн.
Также вы можете рассмотреть возможность использования более гибкой фабрики соединений, которая повторяет попытки и пытается установить соединение без пула, если пул очищается. Конечно, это идет рука об руку с моим предыдущим замечанием о том, что если вы откалибруете максимальное число принимаемых HTTP-запросов, чтобы соответствовать размеру пула, то пул не может быть исчерпан (если не произойдет утечка, вернитесь к исходной точке). Я бы не рекомендовал это, хотя, я думаю, гораздо лучше ставить запросы в очередь на территории http.sys, чем на территории выделения ресурсов приложения (т. Е. Ограничивать максимально допустимые HTTP-вызовы).
И, наконец, что не менее важно, уменьшите продолжительность каждого звонка. Если ваш вызов занимает в среднем 5 секунд, то вы видите одновременно 110 соединений со скоростью всего 22 запроса в секунду. Если вы сократите продолжительность вызова, устранив узкие места SQL до 1 секунды, вы сможете обслуживать 110 запросов в секунду для достижения того же ограничения ресурсов (110 одновременных запросов), то есть увеличение трафика в 5 раз. Самым большим виновником обычно является сканирование таблицы, убедитесь, что все ваши запросы используют разумный SQL и имеют оптимальный путь доступа к данным. Как говорит Дэвид, SQL Profiler - ваш друг.
Вы также можете использовать SqlConnection.ChangeDatabase для изменения базы данных.