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 может быть неточной, если за время меньше миллисекунды выполняется большое количество хранимых процедур. |
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 и управляемом экземпляре SQL необходимо разрешение VIEW SERVER STATE
.
Для целей службы База данных SQL Basic, S0 и S1, а также для баз данных в эластичных пулах, учетной записи администратора сервера, учетной записи администратора Microsoft Entra или членства в ##MS_ServerStateReader##
роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE
в базе данных или членство в роли сервера ##MS_ServerStateReader##
.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.
Замечания
Статистика в представлении обновляется после завершения выполнения запроса.
Примеры
А. Поиск запросов 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;
См. также
Связанные с выполнением динамические административные представления и функции (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)
sys.dm_exec_procedure_stats (Transact-SQL)
sys.dm_exec_trigger_stats (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)