sys.dm_exec_query_stats (Transact-SQL)

Область применения: yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure YesУправляемый экземпляр 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)