Как Вы измеряете количество открытых соединений с базой данных

Я пытаюсь определить, есть ли у меня утечка соединения с базой данных. Таким образом, я должен видеть количество открытых соединений. У меня есть некоторый простой тестовый код, который создает утечку:

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: Общая Статистика/Пользовательские соединения:

alt text
(источник: yart.com.au)

Однако они, кажется, нуль, когда я выполняю свой код:

alt text
(источник: yart.com.au)

Что я должен изменить для фактического наблюдения соединений?

ОТВЕТ

Я утвердил ответ ниже. Даже при том, что это не использует инструменты производительности, его достаточно хорошее для моего использования. Нижняя строка, я хотел видеть, сколько соединений остается открытыми после открытия веб-страницы, и это добилось цели.

9
задан Glorfindel 29 July 2019 в 23:05
поделиться

2 ответа

Вы можете попробовать выполнить запрос к главной базе данных следующим образом:

SELECT SPID,
       STATUS,
       PROGRAM_NAME,
       LOGINAME=RTRIM(LOGINAME),
       HOSTNAME,
       CMD
FROM  MASTER.DBO.SYSPROCESSES
WHERE DB_NAME(DBID) = 'TEST' AND DBID != 0 

См. эту ссылку для получения дополнительных сведений.

5
ответ дан 3 November 2019 в 04:41
поделиться

Вы пробовали запустить хранимую процедуру sp_who ? Если есть устаревшие открытые соединения, они должны там появиться.

Чтобы показать только sa запущенные пользовательские процессы:

EXEC sp_who 'sa'
2
ответ дан 3 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: