sys.dm_exec_query_stats (Transact-SQL)
Область применения: SQL Server (все поддерживаемые версии)
База данных SQL Azure
Управляемый экземпляр SQL Azure
Возвращает статистическую статистику производительности для кэшированных планов запросов в SQL Server. Представление содержит по одной строке для каждой инструкции запроса в плане в кэше, а время жизни строк связано с самим планом. Когда план удаляется из кэша, соответствующие строки исключаются из представления.
Примечание
- Результаты sys.dm_exec_query_stats могут отличаться при каждом выполнении, так как данные отражают только готовые запросы, а не те, которые еще не выполнялись.
- Чтобы вызвать это из выделенного пула SQL в Azure Synapse Analytics или pdW, используйте имя sys.dm_pdw_nodes_exec_query_stats. Для бессерверного пула SQL используется sys.dm_exec_query_stats.
Имя столбца | Тип данных | Описание |
---|---|---|
sql_handle | varbinary(64) | Токен, однозначно определяющий пакет или хранимую процедуру, частью которой является запрос. Столбец sql_handle вместе со столбцами statement_start_offset и statement_end_offset может использоваться для получения SQL-текста запроса с помощью вызова функции динамического управления sys.dm_exec_sql_text. |
statement_start_offset | int | Начальная позиция запроса, описываемого строкой, в соответствующем тексте пакета или сохраняемом объекте, в байтах, начиная с 0. |
statement_end_offset | int | Конечная позиция запроса, описываемого строкой, в соответствующем тексте пакета или сохраняемом объекте, в байтах, начиная с 0. Для версий до SQL Server 2014 (12.x) значение -1 указывает конец пакета. Конечные комментарии больше не включаются. |
plan_generation_num | bigint | Порядковый номер, который может использоваться для проведения различия между экземплярами планов после рекомпиляции. |
plan_handle | varbinary(64) | Это токен, который уникально идентифицирует план выполнения запросов для выполненного пакета, план которого хранится в кэше планов или пребывает на этапе выполнения. Это значение можно передать функции динамического управления sys.dm_exec_query_plan для получения плана запроса. Значение всегда равно 0x000, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу. |
creation_time | datetime | Время компиляции плана. |
last_execution_time | datetime | Время начала последнего выполнения плана. |
execution_count | bigint | Количество выполнений плана с момента последней компиляции. |
total_worker_time | bigint | Общее время ЦП, затраченное на выполнение плана с момента компиляции, в микросекундах (но с точностью до миллисекунды). Для скомпилированных в собственном коде хранимых процедур функция total_worker_time может быть неточной, если за время меньше миллисекунды выполняется большое количество хранимых процедур. |
last_worker_time | bigint | Время ЦП, затраченное на последнее выполнение плана, в микросекундах (но с точностью до миллисекунды). 1 |
min_worker_time | bigint | Минимальное время ЦП, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды). 1 |
max_worker_time | bigint | Максимальное время ЦП, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды). 1 |
total_physical_reads | bigint | Общее количество операций физического считывания при выполнении плана с момента его компиляции. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
last_physical_reads | bigint | Количество операций физического считывания за время последнего выполнения плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
min_physical_reads | bigint | Минимальное количество операций физического считывания за одно выполнение плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
max_physical_reads | bigint | Максимальное количество операций физического считывания за одно выполнение плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
total_logical_writes | bigint | Общее количество операций логической записи при выполнении плана с момента его компиляции. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
last_logical_writes | bigint | Количество страниц буферного пула, грязных во время последнего завершения выполнения плана. После чтения страницы страница становится грязной только при первом изменении. Когда страница становится грязной, это число увеличивается. Последующие изменения уже грязной страницы не влияют на это число. Это число всегда будет равно 0 при запросе таблицы, оптимизированной для памяти. |
min_logical_writes | bigint | Минимальное количество операций логической записи за одно выполнение плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
max_logical_writes | bigint | Максимальное количество операций логической записи за одно выполнение плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
total_logical_reads | bigint | Общее количество операций логического считывания при выполнении плана с момента его компиляции. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
last_logical_reads | bigint | Количество операций логического считывания за время последнего выполнения плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
min_logical_reads | bigint | Минимальное количество операций логического считывания за одно выполнение плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
max_logical_reads | bigint | Максимальное количество операций логического считывания за одно выполнение плана. Значение всегда равно 0 при запросе оптимизированной для памяти таблицы. |
total_clr_time | bigint | Время, сообщаемое в микросекундах (но только точных миллисекундах), потребляемое внутри объектов среды CLR (Microsoft платформа .NET Framework clR) при выполнении этого плана с момента компиляции. Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями. |
last_clr_time | bigint | Время, указанное в микросекундах (но только точных миллисекундах), потребляемых выполнением внутри платформа .NET Framework объектов CLR во время последнего выполнения этого плана. Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями. |
min_clr_time | bigint | Минимальное время, сообщаемое в микросекундах (но только точно в миллисекундах), что этот план когда-либо использовался внутри платформа .NET Framework объектов CLR во время одного выполнения. Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями. |
max_clr_time | bigint | Максимальное время, сообщаемое в микросекундах (но только до миллисекунд), что этот план когда-либо использовался внутри платформа .NET Framework CLR во время одного выполнения. Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями. |
total_elapsed_time | bigint | Общее время, затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды). |
last_elapsed_time | bigint | Время, затраченное на последнее выполнение плана, в микросекундах (но с точностью до миллисекунды). |
min_elapsed_time | bigint | Минимальное время, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды). |
max_elapsed_time | bigint | Максимальное время, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды). |
query_hash | Binary(8) | Двоичное хэш-значение рассчитывается для запроса и используется для идентификации запросов с аналогичной логикой. Можно использовать хэш запроса для определения использования статистических ресурсов для запросов, которые отличаются только своими литеральными значениями. |
query_plan_hash | binary(8) | Двоичное хэш-значение рассчитывается для плана выполнения запроса и используется для идентификации аналогичных планов выполнения запросов. Можно использовать хэш плана запроса для нахождения совокупной стоимости запросов со схожими планами выполнения. Значение всегда равно 0x000, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу. |
total_rows | bigint | Общее число строк, возвращаемых запросом. Не может иметь значение NULL. Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу. |
last_rows | bigint | Число строк, возвращенных последним выполнением запроса. Не может иметь значение NULL. Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу. |
min_rows | bigint | Минимальное количество строк, возвращаемых запросом во время одного выполнения. Не может иметь значение NULL. Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу. |
max_rows | bigint | Максимальное количество строк, возвращаемых запросом во время одного выполнения. Не может иметь значение NULL. Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу. |
statement_sql_handle | varbinary(64) | Область применения: SQL Server 2014 (12.x) и более поздних версий. Заполнено значениями, не имеющими значения NULL, только если хранилище запросов включен и собирает статистику для конкретного запроса. |
statement_context_id | bigint | Область применения: SQL Server 2014 (12.x) и более поздних версий. Заполнено значениями, не имеющими значения NULL, только если хранилище запросов включен и собирает статистику для конкретного запроса. |
total_dop | bigint | Общая сумма степени параллелизма, используемая с момента компиляции плана. Оно всегда будет равно 0 для запроса таблицы, оптимизированной для памяти. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
last_dop | bigint | Степень параллелизма при выполнении этого плана в последний раз. Оно всегда будет равно 0 для запроса таблицы, оптимизированной для памяти. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
min_dop | bigint | Минимальная степень параллелизма, которую когда-либо использовал этот план во время одного выполнения. Оно всегда будет равно 0 для запроса таблицы, оптимизированной для памяти. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
max_dop | bigint | Максимальная степень параллелизма этого плана, когда-либо используемого во время одного выполнения. Оно всегда будет равно 0 для запроса таблицы, оптимизированной для памяти. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
total_grant_kb | bigint | Общий объем зарезервированного гранта памяти в кб, полученного с момента компиляции. Оно всегда будет равно 0 для запроса таблицы, оптимизированной для памяти. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
last_grant_kb | bigint | Объем зарезервированного объема памяти в КБ при выполнении этого плана в последний раз. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
min_grant_kb | bigint | Минимальный объем зарезервированного объема памяти в КБ этого плана, когда-либо полученного во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
max_grant_kb | bigint | Максимальный объем зарезервированного предоставления памяти в КБ этого плана, когда-либо полученного во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
total_used_grant_kb | bigint | Общий объем зарезервированного предоставления памяти в кб этого плана, используемого с момента компиляции. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
last_used_grant_kb | bigint | Объем используемого предоставления памяти в КБ при выполнении этого плана в последний раз. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
min_used_grant_kb | bigint | Минимальный объем используемой памяти в КБ этого плана, когда-либо используемый во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
max_used_grant_kb | bigint | Максимальный объем используемого объема памяти в КБ этого плана, когда-либо используемого во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
total_ideal_grant_kb | bigint | Общий объем идеального предоставления памяти в КБ этого плана оценивается с момента компиляции. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
last_ideal_grant_kb | bigint | Объем идеального предоставления памяти в КБ при выполнении этого плана в последний раз. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
min_ideal_grant_kb | bigint | Минимальный объем идеального объема памяти в КБ этого плана, который когда-либо оценивается во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
max_ideal_grant_kb | bigint | Максимальный объем идеального объема памяти в КБ этого плана, который когда-либо оценивается во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
total_reserved_threads | bigint | Общая сумма зарезервированных параллельных потоков, используемых этим планом с момента компиляции. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
last_reserved_threads | bigint | Количество зарезервированных параллельных потоков при выполнении этого плана в последний раз. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
min_reserved_threads | bigint | Минимальное число зарезервированных параллельных потоков, которые этот план когда-либо использовался во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
max_reserved_threads | bigint | Максимальное число зарезервированных параллельных потоков, которые этот план когда-либо использовался во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
total_used_threads | bigint | Общая сумма используемых параллельных потоков, используемых этим планом с момента компиляции. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
last_used_threads | bigint | Число используемых параллельных потоков при выполнении этого плана в последний раз. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
min_used_threads | bigint | Минимальное число используемых параллельных потоков, которые этот план когда-либо использовался во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
max_used_threads | bigint | Максимальное число используемых параллельных потоков, которые этот план когда-либо использовался во время одного выполнения. Оно всегда будет равно 0 для запроса оптимизированной для памяти таблицы. Область применения: SQL Server 2016 (13.x); и более поздних версий. |
total_columnstore_segment_reads | bigint | Общая сумма сегментов columnstore, считываемых запросом. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_reads | bigint | Количество сегментов columnstore, считываемых последним выполнением запроса. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_reads | bigint | Минимальное количество сегментов columnstore, которые когда-либо считываются запросом во время одного выполнения. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_reads | bigint | Максимальное количество сегментов columnstore, которые когда-либо считываются запросом во время одного выполнения. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
total_columnstore_segment_skips | bigint | Общая сумма сегментов columnstore, пропущенных запросом. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_skips | bigint | Количество сегментов columnstore, пропущенных последним выполнением запроса. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_skips | bigint | Минимальное количество сегментов columnstore, которые когда-либо пропускаются запросом во время одного выполнения. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_skips | bigint | Максимальное число сегментов columnstore, которые когда-либо пропускаются запросом во время одного выполнения. Не может иметь значение NULL. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
total_spills | bigint | Общее количество страниц, разбросированных при выполнении этого запроса с момента компиляции. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
last_spills | bigint | Количество страниц, разбросированных при последнем выполнении запроса. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
min_spills | bigint | Минимальное количество страниц, которые этот запрос когда-либо разлил во время одного выполнения. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
max_spills | bigint | Максимальное количество страниц, которые этот запрос когда-либо разлил во время одного выполнения. Область применения: начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3 |
pdw_node_id | int | Идентификатор узла, на который находится данное распределение. Область применения: Azure Synapse Analytics, Analytics Platform System (PDW) |
total_page_server_reads | bigint | Общее количество операций чтения удаленного сервера страниц, выполненных выполнением этого плана с момента компиляции. Область применения: База данных SQL Azure гипермасштабирование |
last_page_server_reads | bigint | Количество операций чтения удаленного сервера страниц, выполненных при последнем выполнении плана. Область применения: База данных SQL Azure гипермасштабирование |
min_page_server_reads | bigint | Минимальное количество удаленных серверов страниц считывает, что этот план когда-либо выполнялся во время одного выполнения. Область применения: База данных SQL Azure гипермасштабирование |
max_page_server_reads | bigint | Максимальное число удаленных серверов страниц считывает, что этот план когда-либо выполнялся во время одного выполнения. Область применения: База данных SQL Azure гипермасштабирование |
Примечание
1 Для скомпилированных в собственном коде хранимых процедур при включении сбора статистики рабочий период собирается в миллисекундах. Если запрос выполняется менее чем за одну миллисекунда, значение будет равно 0.
Разрешения
На SQL Server и управляемом экземпляре SQL необходимо разрешение VIEW SERVER STATE
.
Для целей обслуживания баз данных SQL уровня "Базовый", S0 и S1, а также для баз данных в эластичных пулах необходимо иметь учетную запись администратора сервера, администратора Azure Active Directory или членство ##MS_ServerStateReader##
в роли сервера. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE
в базе данных или членство в роли сервера ##MS_ServerStateReader##
.
Remarks
Статистика в представлении обновляется после завершения выполнения запроса.
Примеры
A. Поиск запросов TOP N
В следующем примере возвращаются сведения о пяти первых запросах, отсортированных по среднему времени ЦП. В этом примере объединяются запросы в соответствии с хэшем запроса таким образом, чтобы обеспечить группировку логически эквивалентных запросов по их совокупному потреблению ресурсов.
SELECT TOP 5 query_stats.query_hash AS "Query Hash",
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",
MIN(query_stats.statement_text) AS "Statement Text"
FROM
(SELECT QS.*,
SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(ST.text)
ELSE QS.statement_end_offset END
- QS.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;
Б. Возврат статистического выражения счетчика строк для запроса
В следующем примере показан возврат сведений о статистическом выражении счетчика строк (общее число строк, минимальное число строк, максимальное число строк и число строк при последнем выполнении) для запросов.
SELECT qs.execution_count,
SUBSTRING(qt.text,qs.statement_start_offset/2 +1,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), qt.text)) * 2
ELSE qs.statement_end_offset end -
qs.statement_start_offset
)/2
) AS query_text,
qt.dbid, dbname= DB_NAME (qt.dbid), qt.objectid,
qs.total_rows, qs.last_rows, qs.min_rows, qs.max_rows
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.text like '%SELECT%'
ORDER BY qs.execution_count DESC;
См. также раздел
Динамические административные представления и функции, связанные с выполнением (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)
sys.dm_exec_procedure_stats (Transact-SQL)
sys.dm_exec_trigger_stats (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)