sys.dm_exec_query_stats (Transact-SQL)
Возвращает суммарную статистику производительности для кэшированных планов запросов в SQL Server 2012. Представление одной строки для каждой инструкции плана в кэше и время жизни строк связано с самим планом. Когда план удаляется из кэша, соответствующие строки исключаются из представления.
Примечание |
---|
Начальный запрос представления 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 AdventureWorks2012;
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;
См. также
Справочник
Динамические административные представления и функции (Transact-SQL)
Динамические административные представления и функции, связанные с выполнением (Transact-SQL)