...
Query Store:
- Поддержка: Доступен с SQL Server 2016. Позволяет сохранять и анализировать статистику выполнения запросов. Вместе с исправлениями и улучшениями может помочь в определении изменений в производительности запросов.
- Настройка: Нужно будет включить включение Query Store для каждой базы данных отдельно. Это делается через SQL Server Management Studio или с помощью команды:
Code Block |
---|
language | sql |
---|
theme | RDark |
---|
title | postgresqlMSSQL |
---|
|
ALTER DATABASE [YourDatabaseName] SET QUERY_STORE = ON; |
Использование DMVs:
- Возраст статистики: DMVs возвращают информацию, которая обновляется в реальном времени, но на момент запроса. Это значит, что данные о завершенных запросах недоступны.
- Разрешения: Для доступа к определенным DMVs могут потребоваться соответствующие разрешения. Например, нужно иметь разрешение
VIEW SERVER STATE
, чтобы видеть информацию о всех сессиях, иначе видны будут только ваши собственные.
Индексирование:
- Нельзя забывать о важности качественного индексирования, которое напрямую определяет производительность запросов. Нехватка индексов или неправильные индексы могут вызвать проблемы с производительностью, даже если доступ к статистике осуществляется правильно.
Пропускная способность и нагрузка:
- При использовании DMVs для мониторинга запросов следует учитывать, что извлеченные данные могут сами потребовать ресурсов при высоких нагрузках на систему.
...
Code Block |
---|
language | sql |
---|
theme | RDark |
---|
title | MSSQL |
---|
|
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; |
Expand |
---|
title | Пример выполнения в MS SQL 2014 |
---|
|
Image Added |
Этот функционал полезен для диагностики текущих проблем с производительностью
...
Code Block |
---|
language | sql |
---|
theme | RDark |
---|
title | MSSQL |
---|
|
-- Включите ведение статистики для запросов
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'user connection statistics', 1;
RECONFIGURE; |
3.2 Сбор статистики
Для сбора статистики о долгих запросах можно использовать следующий запрос:
...
Code Block |
---|
language | sql |
---|
theme | RDark |
---|
title | MSSQL |
---|
|
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; |
Expand |
---|
title | Пример выполнения в MS SQL 2014 |
---|
|
Image Added
|
- Сбор самых долгих (по среднему времени выполнения) запросов:
Code Block |
---|
language | sql |
---|
theme | RDark |
---|
title | MSSQL |
---|
|
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; |
Expand |
---|
title | Пример выполнения в MS SQL 2014 |
---|
|
Image Added
|
- Сбор самых долгих (по максимальному времени выполнения) запросов:
Code Block |
---|
language | sql |
---|
theme | RDark |
---|
title | MSSQL |
---|
|
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; |
Expand |
---|
title | Пример выполнения в MS SQL 2014 |
---|
|
Image Added
|
Для анализа будут полезны все три вида статистики.
...
Если вы хотите использовать аналоги PWR-отчетов, в MS SQL Server есть функционал
для генерации отчетов производительности, такие как SQL Server Reporting Services (SSRS),
которые могут быть использованы для создания более сложных отчетов.
Особенности версий MS SQL Server 2012 - 2016+ для сбора статистики: