Declaration of VAR

and some other stuff

Мониторинг потребления оперативной памяти SQL запросами

2015-01-31 22:35:17 +0300

2015-01-31 22:35:17 +0300 | Comments

В какой-то момент мы обнаружили, что у нас на сервере выполняются SQL-запросы весом по 16 гигабайт. И не просто один, а пачка таких запросов, что поедало всю оперативку на сервере. С этим надо было как-то бороться, а для этого нужно мониторить сервер, чтобы отлавливать момент, когда они появляются. Для этой цели было написано приложение queryRAMconsumption.

Сразу скажу, что у нас MS SQL Server, потому всё делалось для него.

Описание

В чём суть приложения. Существует SQL-запрос, выдающий некоторую информацию по выполняющимся в данный момент на сервере запросам (и хранимым процедурам). Вот он:

SELECT TOP 1 requested_memory_kb / 1024, DB_NAME(st.dbid), text
FROM sys.dm_exec_query_memory_grants AS mg
     CROSS APPLY sys.dm_exec_sql_text(mg.sql_handle) AS st
ORDER BY requested_memory_kb DESC

Приложение по таймеру выполняет этот запрос и записывает максимальное значение запрошенной оперативки в список. Если значение превысило некоторый лимит, который задаётся в .config файле, то оно пометится соответствующей надписью, а сам запрос можно будет посмотреть во второй вкладке приложения - там будет указано время, когда запрос выполнялся, база данных (если удастся определить), а также первые несколько строк текста запроса.

Скриншоты приложения:

Для запуска мониторинга нужно указать значение интервала проверки в секундах и доменное имя SQL-сервера (IP тоже должен подойти).

По нажатию на F1 появляется окно справки.

Требования

Приложение тестировалось в Windows 8.1, но должно работать в любой, главное чтобы был установлен .NET Framework 4.5.1.

Настройки

В .config файле есть некоторые настройки.

db_login

Логин для подключения к SQL-серверу.

db_password

Пароль для подключения к SQL-серверу.

defaultServer

Имя MS SQL сервера по умолчанию.

limit4query

Значение в мегабайтах, превышение которого будет считаться “тяжёлым” запросом.

Загрузить

Для запуска нужна только папка bin\Release, остальное можете удалить. Из самой папки нужны только эти файлы:

  • queriesRAMconsumption.exe
  • queriesRAMconsumption.exe.config

Можете оставлять замечания/предложения на этой странице либо тут в каментах.