Пул соединений с базой данных с помощью многопоточной службы

У меня есть служба .NET 4 C #, которая использует библиотеки TPL для потоковой передачи. Недавно мы переключили его на использование пула соединений, поскольку одно соединение становилось узким местом для обработки.

Раньше мы использовали блокировку для управления безопасностью потоков в объекте подключения. При резервном копировании работы очередь будет существовать как задачи, и многие потоки (задачи) будут ждать предложения блокировки. Теперь в большинстве сценариев потоки ждут ввода-вывода базы данных и работают НАМНОГО быстрее.

Однако теперь, когда я использую пул соединений, у нас возникла новая проблема. После достижения максимального количества подключений (100 по умолчанию), если требуются дальнейшие подключения, истекает время ожидания (см. Информация о пуле ). Когда это происходит, выдается исключение с сообщением «Истекло время ожидания запроса на подключение».

Все мои IDisposables находятся в операторах using, и я правильно управляю своими подключениями. Этот сценарий происходит из-за того, что требуется больше работы, чем пул может обработать (что ожидается). Я понимаю, почему возникает это исключение, и знаю способы его обработки. Простая повторная попытка выглядит как взлом. Я также понимаю, что могу увеличить период ожидания с помощью строки подключения, однако это не кажется надежным решением.В предыдущем проекте (без объединения) рабочие элементы обрабатывались из-за блокировки в приложении.

Как лучше всего справиться с этим сценарием, чтобы гарантировать выполнение всей работы?

9
задан Andy Christianson 6 January 2012 в 18:32
поделиться