sys.dm_exec_query_stats (Transact-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. Значение -1 обозначает конец пакета.

plan_generation_num

bigint

Порядковый номер, который может использоваться для отличия экземпляров планов после рекомпиляции.

plan_handle

varbinary(64)

Маркер, ссылающийся на скомпилированный план, частью которого является запрос. Это значение можно передать функции динамического управления sys.dm_exec_query_plan для получения плана запроса.

creation_time

datetime

Время компиляции плана.

last_execution_time

datetime

Время начала последнего выполнения плана.

execution_count

bigint

Количество выполнений плана с момента последней компиляции.

total_worker_time

bigint

Общее время ЦП, затраченное на выполнение плана с момента компиляции, в микросекундах (но с точностью до миллисекунды).

last_worker_time

bigint

Время ЦП, затраченное на последнее выполнение плана, в микросекундах (но с точностью до миллисекунды).

min_worker_time

bigint

Минимальное время ЦП, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды).

max_worker_time

bigint

Максимальное время ЦП, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды).

total_physical_reads

bigint

Общее количество операций физического считывания при выполнении плана с момента его компиляции.

last_physical_reads

bigint

Количество операций физического считывания за время последнего выполнения плана.

min_physical_reads

bigint

Минимальное количество операций физического считывания за одно выполнение плана.

max_physical_reads

bigint

Максимальное количество операций физического считывания за одно выполнение плана.

total_logical_writes

bigint

Общее количество операций логической записи при выполнении плана с момента его компиляции.

last_logical_writes

bigint

Количество операций логической записи за время последнего выполнения плана.

min_logical_writes

bigint

Минимальное количество операций логической записи за одно выполнение плана.

max_logical_writes

bigint

Максимальное количество операций логической записи за одно выполнение плана.

total_logical_reads

bigint

Общее количество операций логического считывания при выполнении плана с момента его компиляции.

last_logical_reads

bigint

Количество операций логического считывания за время последнего выполнения плана.

min_logical_reads

bigint

Минимальное количество операций логического считывания за одно выполнение плана.

max_logical_reads

bigint

Максимальное количество операций логического считывания за одно выполнение плана.

total_clr_time

bigint

Общее время, затраченное на выполнение плана внутри объектов 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

Максимальное время, когда-либо затраченное на выполнение плана внутри среды CLR .NET Framework, в микросекундах (но с точностью до миллисекунды). Объекты среды 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)

Двоичное хэш-значение рассчитывается для плана выполнения запроса и используется для идентификации аналогичных планов выполнения запросов. Можно использовать хэш плана запроса для нахождения совокупной стоимости запросов со схожими планами выполнения. Дополнительные сведения см. в разделе Поиск и настройка сходных запросов с помощью хэширования запросов и планов запросов.

total_rows

bigint

Общее число строк, возвращаемых запросом. Не может принимать значение NULL.

last_rows

bigint

Общее число строк, возвращенных последним выполненным запросом. Не может принимать значение NULL.

min_rows

bigint

Минимальное число строк, возвращенных запросом за время выполнения этого плана с момента последней компиляции. Не может принимать значение NULL.

max_rows

bigint

Максимальное число строк, возвращенных запросом за время выполнения этого плана с момента последней компиляции. Не может принимать значение NULL.

Разрешения

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

Замечания

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

Примеры

А. Определение запросов TOP N

В следующем примере возвращаются сведения о пяти первых запросах, отсортированных по среднему времени ЦП. В этом примере объединяются запросы в соответствии с хэшем запроса таким образом, чтобы обеспечить группирование логически эквивалентных запросов по их совокупному потреблению ресурсов.

USE AdventureWorks2008R2;
GO
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;
GO

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

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

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;