sys.dm_exec_query_stats (Transact-SQL)
Возвращает суммарную статистику производительности для кэшированных планов запросов в SQL Server. Представление содержит по одной строке для каждой инструкции запроса в плане в кэше, а время жизни строк связано с самим планом. Когда план удаляется из кэша, соответствующие строки исключаются из представления.
Примечание
Начальный запрос представления sys.dm_exec_query_stats может выдавать неточные результаты, если на сервере выполняется рабочая нагрузка. Более точные результаты могут быть получены при повторном выполнении запроса.
Область применения: SQL Server (от SQL Server 2008 до текущей версии), База данных SQL Azure. |
Имя столбца |
Тип данных |
Описание |
---|---|---|
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 значение -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 |
Общее время, затраченное на выполнение плана внутри объектов Корпорация Майкрософт.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) |
Двоичное хэш-значение рассчитывается для плана выполнения запроса и используется для идентификации аналогичных планов выполнения запросов. Можно использовать хэш плана запроса для нахождения совокупной стоимости запросов со схожими планами выполнения. Значение всегда равно 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 до SQL Server 2014. Зарезервировано для последующего использования. |
statement_context_id |
bigint |
Область применения: начиная с SQL Server 2014 до SQL Server 2014. Зарезервировано для последующего использования. |
1 Если сбор статистики включен, то накопленное время рабочей роли для скомпилированных в собственном коде хранимых процедур указывается в миллисекундах. Если запрос выполняется за время меньше миллисекунды, это значение будет равно 0.
Разрешения
Требуется разрешение VIEW SERVER STATE для сервера.
Заметки
Статистика в представлении обновляется после завершения выполнения запроса.
Примеры
A. Поиск запросов 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;
Б. Возврат статистического выражения счетчика строк для запроса
В следующем примере показан возврат сведений о статистическом выражении счетчика строк (общее число строк, минимальное число строк, максимальное число строк и число строк при последнем выполнении) для запросов.
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)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)