Мониторинг баз данных: MS SQL
Microsoft SQL Server на ваших Windows-серверах: нагрузка, память, блокировки, базы и журналы транзакций — дашборд и готовые алерты. В самой СУБД ничего не настраивается, пароль от неё агенту не нужен. PostgreSQL и MySQL/MariaDB — следующими.
Как включить
Ничего делать не нужно. Windows-агент (1.7 и новее) при установке видит службу MSSQLSERVER (экземпляр по умолчанию) или MSSQL$<имя> (именованный, в том числе Express) и включает сбор счётчиков производительности SQL Server. Если SQL Server поставили после агента — переустановите агента той же командой из портала, настройки сохранятся.
Данные — в дашборде «Базы данных: MS SQL» вашей Grafana. Фильтры сверху: сервер, экземпляр, база.
Что на дашборде
- Сейчас: число экземпляров, остановленные службы, подключения, запросы в секунду, взаимоблокировки за период и процессы, которые прямо сейчас ждут чужую блокировку;
- Нагрузка: пакеты запросов (Batch Requests/sec), компиляции и перекомпиляции планов, подключения и входы;
- Память: попадания в кеш страниц, время жизни страницы в кеше (Page Life Expectancy), сколько памяти SQL Server занял и сколько хочет, запросы в очереди за памятью;
- Блокировки: ожидания, взаимоблокировки и таймауты по всем типам ресурсов, заблокированные процессы, самая долгая открытая транзакция;
- Диск и ошибки: чтение и запись страниц, ленивые записи, контрольные точки, ошибки SQL по типам;
- Базы: таблица с размером данных и журнала, заполненностью журнала и открытыми транзакциями по каждой базе, транзакции в секунду и рост баз во времени.
Алерты
В портале, раздел «Алерты», категория «Базы данных». Включены сразу, пороги и тексты меняются как у остальных правил (см. «Алерты и уведомления»).
| Правило | Когда срабатывает | Уровень |
|---|---|---|
| Служба остановлена (MssqlServiceDown) | служба экземпляра с автозапуском не работает 3 минуты; остановленные вручную экземпляры с ручным запуском не трогаются | critical |
| Взаимоблокировки (MssqlDeadlocks) | больше 5 взаимоблокировок за 15 минут; в 1С это «Конфликт блокировок при выполнении транзакции» | warning |
| Процессы ждут блокировку (MssqlBlockedProcesses) | есть заблокированные процессы 5 минут подряд | warning |
| Мало памяти под кеш (MssqlLowPageLife) | страница живёт в кеше меньше 300 секунд 15 минут подряд; снимается выше 600 | warning |
| Журнал транзакций заполняется (MssqlLogFull) | журнал базы занят больше чем на 90% 15 минут подряд; снимается ниже 80% | warning |
| Долгая транзакция (MssqlLongTransaction) | транзакция открыта дольше 30 минут | warning |
Закрытие месяца и регламентные операции в 1С законно держат транзакцию дольше получаса — на такие окна правило «Долгая транзакция» можно заглушить или поднять порог.
Метрики для своих панелей
Все счётчики начинаются с windows_mssql_, у каждого есть метки instance (сервер) и mssql_instance (экземпляр), у счётчиков баз — database, у блокировок и ошибок — resource. Агрегат по всем базам и ресурсам приходит отдельной серией _Total — исключайте её при суммировании. Нарастающие счётчики (запросы, взаимоблокировки, транзакции) — через rate() или increase(). Например, запросы в секунду: sum(rate(windows_mssql_sqlstats_batch_requests[5m])).
Если данных нет
На сервере в PowerShell:
Get-Service MSSQLSERVER, 'MSSQL$*' # служба SQL Server есть? (Get-CimInstance Win32_Service -Filter "Name='monitoring-windows-exporter'").PathName # в строке запуска должен быть mssql в списке --collectors.enabled
Если mssql в списке нет — SQL Server поставили после агента: переустановите агента. Если счётчиков нет и в «Системном мониторе» (группы SQLServer:*), их восстанавливают командой lodctr /R от администратора.