Microsoft SQL Server (MS SQL) версии 2012-2016 поддерживают множество функций для мониторинга
и сбора статистики выполнения запросов. Однако для каждой версии могут быть свои нюансы и
особенности. Вот основные моменты, которые стоит учесть:
sys.dm_exec_requests
, sys.dm_exec_query_stats
и sys.dm_exec_sessions
.sys.dm_exec_query_stats
.Query Store
(но требует дальнейших обновлений в SQL Server 2016).Query Store:
ALTER DATABASE [YourDatabaseName] SET QUERY_STORE = ON; |
Использование DMVs:
VIEW SERVER STATE
, чтобы видеть информацию о всех сессиях, иначе видны будут только ваши собственные.Индексирование:
Пропускная способность и нагрузка:
Версии MS SQL 2012-2016 достаточно хорошо поддерживают функции для мониторинга и сбору статистики, однако каждая версия привносит свои особенности и требования к настройке. Для полноценного мониторинга рекомендуется использовать Query Store в SQL Server 2016 и выше, а также заранее планировать индексы и разрешения для доступа к нужным представлениям DMVs.
Используйте представления динамических управляющих объектов (DMV) для мониторинга
текущих активных соединений и запросов. Запрос к sys.dm_exec_requests и sys.dm_exec_sessions
покажет, какие запросы работают в БД в конкретный момент времени.
SELECT r.session_id, r.status, r.start_time, r.command, r.total_elapsed_time, r.cpu_time, r.reads, r.writes, s.login_name, s.host_name, s.program_name FROM sys.dm_exec_requests r JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id WHERE r.status <> 'background' ORDER BY r.total_elapsed_time DESC; |
Этот функционал полезен для диагностики текущих проблем с производительностью
и позволяет увидеть долго выполняющиеся запросы.
Однако он не покажет статистику по работе запросов, которые уже завершились,
поэтому его нельзя рассматривать как полноценный инструмент мониторинга.
MS SQL Server не имеет прямого аналога pg_stat_statements как в PostgreSQL, однако вы можете
использовать системные представления и функции для сбора информации.
Вы можете включить сбор статистики, используя следующие команды:
-- Включите ведение статистики для запросов EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'user connection statistics', 1; RECONFIGURE; |
Для сбора статистики о долгих запросах можно использовать следующий запрос:
SELECT TOP 100 qs.query_hash, SUBSTRING(qt.text, (qs.statement_start_offset / 2) + 1, (CASE statement_end_offset WHEN -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2 + 1) AS query_text, qs.execution_count, qs.total_elapsed_time, qs.total_elapsed_time / qs.execution_count AS mean_time, qs.max_elapsed_time, qs.total_rows FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt ORDER BY total_elapsed_time DESC; |
SELECT TOP 100 qs.query_hash, SUBSTRING(qt.text, (qs.statement_start_offset / 2) + 1, (CASE statement_end_offset WHEN -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2 + 1) AS query_text, qs.execution_count, qs.total_elapsed_time, qs.total_elapsed_time / qs.execution_count AS mean_time, qs.max_elapsed_time, qs.total_rows FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt ORDER BY mean_time DESC; |
SELECT TOP 100 qs.query_hash, SUBSTRING(qt.text, (qs.statement_start_offset / 2) + 1, (CASE statement_end_offset WHEN -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2 + 1) AS query_text, qs.execution_count, qs.total_elapsed_time, qs.total_elapsed_time / qs.execution_count AS mean_time, qs.max_elapsed_time, qs.total_rows FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt ORDER BY max_elapsed_time DESC; |
Для анализа будут полезны все три вида статистики.
После сбора статистики вы можете отправить информацию на анализ в
Отдел сопровождения и внедрения: support@iqstore.ru.
Если вы хотите использовать аналоги PWR-отчетов, в MS SQL Server есть функционал
для генерации отчетов производительности, такие как SQL Server Reporting Services (SSRS),
которые могут быть использованы для создания более сложных отчетов.
Особенности версий MS SQL Server 2012 - 2016+ для сбора статистики: