sys.dm_exec_query_stats (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Возвращает статистическую статистику производительности для кэшированных планов запросов в SQL Server. Представление содержит по одной строке для каждой инструкции запроса в плане в кэше, а время жизни строк связано с самим планом. Когда план удаляется из кэша, соответствующие строки исключаются из представления.

Примечание.

  • Результаты sys.dm_exec_query_stats могут отличаться в зависимости от каждого выполнения, так как данные отражают только завершенные запросы, а не те, которые по-прежнему выполнялись в полете.
  • Чтобы вызвать это из выделенного пула SQL в Azure Synapse Analytics или Analytics Platform System (PDW), используйте имя sys.dm_pdw_nodes_exec_query_stats. Для бессерверного пула SQL используется sys.dm_exec_query_stats.
Имя столбца Тип данных Description
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 Basic, S0 и S1, а также для баз данных в эластичных пулах, учетной записи администратора сервера, учетной записи администратора Microsoft Entra или членства в ##MS_ServerStateReader## роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE в базе данных или членство в роли сервера ##MS_ServerStateReader##.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Замечания

Статистика в представлении обновляется после завершения выполнения запроса.

Примеры

А. Поиск запросов TOP N

В следующем примере возвращаются сведения о пяти первых запросах, отсортированных по среднему времени ЦП. В этом примере объединяются запросы в соответствии с хэшем запроса таким образом, чтобы обеспечить группировку логически эквивалентных запросов по их совокупному потреблению ресурсов. В столбце Sample_Statement_Text показан пример структуры запроса, которая соответствует хэшу запроса, но она должна быть прочитана без учета определенных значений в инструкции. Например, если инструкция содержит WHERE Id = 5, его можно прочитать в более универсальной форме: WHERE Id = @some_value

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 Sample_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;  

B. Возврат статистического выражения счетчика строк для запроса

В следующем примере показан возврат сведений о статистическом выражении счетчика строк (общее число строк, минимальное число строк, максимальное число строк и число строк при последнем выполнении) для запросов.

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)