У нас была похожая проблема, которая возникает только в нашей производственной среде, и это было особенно связано с нагрузкой.В напряженное время дня мы получим несколько из вышеупомянутых исключений.
Мы провели обширное расследование, касающееся причин возникновения этого исключения, и внесли много изменений, чтобы исправить проблему.Изменением по умолчанию, которое мы сделали, что облегчило проблему, была настройка пула соединений, установив минимальный размер пула в 1 и максимальный размер пула в 10. (Это может варьироваться в зависимости от вашей ситуации)
Эта проблема будет более распространенной, когда выиметь несколько, т. е. 1000 клиентских БД, и использовать строку подключения по умолчанию (т. е. database = DBName; server = ServerName).Мы явно не устанавливали минимальный / максимальный размер пула, поэтому потребовались настройки по умолчанию, которые устанавливают минимальный размер пула на 0 и максимальный размер пула на 100.
Опять же, у меня нет конкретных доказательств, но теория такова, что во время занятостив тот день, в зависимости от нагрузки, было установлено несколько соединений с сервером БД, и сервер БД был засыпан большим количеством запросов на соединение в одной точке к нескольким базам данных.Либо сервер приложений, либо сервер БД имели пропускную способность для обработки такого количества соединений за короткий промежуток времени.Кроме того, это происходило с сервером с большинством баз данных.Хотя мы не видели большого количества соединений одновременно, но сервер приложений не смог установить соединение с базами данных в течение короткого периода времени, когда в него входило множество запросов.
После того, как мы установили минимальный размер пула, мы ожилиэта проблема, так как существует по крайней мере одно соединение с каждой базой данных, которое доступно постоянно, и если есть поток запросов, требующий подключения к нескольким базам данных, у нас уже было по крайней мере одно соединение с базой данных, прежде чем мы запросим новую.