Есть ли способ проверить соединения в пуле из кода C #? - PullRequest
3 голосов
/ 20 июля 2011

Я разрабатываю инструмент запутывания, который в основном забивает БД на выделенном сервере SQL (используется только для этого инструмента), чтобы извлекать записи, выполнять некоторые манипуляции с данными и затем обновлять эти записи.Все это делается с помощью LINQ to SQL.Я использую задачи и параллельные циклы, чтобы запускать как можно больше обновлений одновременно.Весь SQL выполняется из одной строки подключения.Первоначально я использовал максимальный размер пула соединений по умолчанию (100), предполагая, что этого будет достаточно.Кажется, что после нескольких часов работы (поскольку этот инструмент обновляет миллионы записей), он начинает рвать, потому что не может установить соединение.Посмотрев в пул соединений, я заметил, что достиг своего предела 100. Поэтому я увеличил предел до 200. Это работает намного лучше, однако один из моих процессов (не упомянул, что он выполняется в нескольких процессах) заканчиваетсясбой примерно через 3 часа.Пул соединений, кажется, не использовался слишком сильно, и поэтому я почесал голову.Я проверил многочисленные области в своем коде, чтобы убедиться, что все соединения удаляются, что они и есть.Я даже переместил весь код подключения в одно центральное место, поэтому теперь код устанавливает соединения только из одного места.Чтобы исключить идею максимального использования пула соединений, я хотел бы использовать C # для запроса пула, чтобы увидеть ограничение на исключение при попытке соединения.Это возможно?Есть ли в фреймворке код для этого или мне потребуется выполнить команду SQL для определения этого?

К вашему сведению: я использую 4.0 и SQL 2008.

Заранее спасибо!

1 Ответ

2 голосов
/ 21 июля 2011

Похоже, я смог использовать PerfMon для мониторинга пула соединений. Это показало мне, что я на самом деле нарушал лимит пула, и, к моему удивлению, пула не было 200, как я думал, я его установил. Задача решена! Иногда мы создаем такой сложный код, который вызывает у нас собственные проблемы!

Примечание: изначально я использовал sp_who2, но когда произошло исключение (я), пул был очищен, поэтому я не смог получить точное значение.

...