Поделиться через


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 может не быть точным, если многие выполнения занимают менее 1 миллисекунда.
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 2019 (15.x) и более ранних версий и Управляемого экземпляра SQL Azure требуется разрешение VIEW SERVER STATE.

ДЛЯ SQL Server 2022 (16.x) и более поздних версий требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

В базе данных SQL Azure базовые, S0и S1 целей службы, а также для баз данных в эластичных пулах, учетная запись администратора сервера, учетная запись администратора Microsoft Entra или членство в роли сервера ##MS_ServerStateReader## требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE в базе данных или членство в роли сервера ##MS_ServerStateReader##.

Замечания

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

Примеры

А. Поиск запросов 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;