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


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)