Я пытаюсь определить, есть ли у меня утечка соединения с базой данных. Таким образом, я должен видеть количество открытых соединений. У меня есть некоторый простой тестовый код, который создает утечку:
protected void Page_Load(object sender, EventArgs e)
{
for(int i = 0; i < 100; i++)
{
SqlConnection sql = new SqlConnection(@"Data Source=.\SQLExpress;UID=sa;PWD=fjg^%kls;Initial Catalog=ABC");
sql.Open();
}
}
Примечание там не является никаким.Close, и это действительно заражает катастрофический отказ, будучи выполненным 3 раза в быстрой последовательности.
Для измерения утечки, я выполняю Монитор производительности и измеряю SQLServer: Общая Статистика/Пользовательские соединения:
(источник: yart.com.au)
Однако они, кажется, нуль, когда я выполняю свой код:
(источник: yart.com.au)
Что я должен изменить для фактического наблюдения соединений?
ОТВЕТ
Я утвердил ответ ниже. Даже при том, что это не использует инструменты производительности, его достаточно хорошее для моего использования. Нижняя строка, я хотел видеть, сколько соединений остается открытыми после открытия веб-страницы, и это добилось цели.
Вы можете попробовать выполнить запрос к главной базе данных следующим образом:
SELECT SPID,
STATUS,
PROGRAM_NAME,
LOGINAME=RTRIM(LOGINAME),
HOSTNAME,
CMD
FROM MASTER.DBO.SYSPROCESSES
WHERE DB_NAME(DBID) = 'TEST' AND DBID != 0
См. эту ссылку для получения дополнительных сведений.
Вы пробовали запустить хранимую процедуру sp_who
? Если есть устаревшие открытые соединения, они должны там появиться.
Чтобы показать только sa
запущенные пользовательские процессы:
EXEC sp_who 'sa'