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


sys.dm_exec_query_profiles (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Контролирует ход выполнения запросов в реальном времени. Например, используйте данное динамическое административное представление для определения, какая часть запроса выполняется медленно. Это динамическое административное представление можно объединять с другими за счет столбцов, определенных в поле описания. Или объедините данное динамическое административное представление с другими счетчиками производительности (такими как Системный Монитор, xperf), используя столбцы меток времени.

Возвращаемая таблица

Возвращаемые счетчики есть на каждом операторе и каждом потоке. Результаты являются динамическими и не соответствуют результатам существующих параметров, таких как SET STATISTICS XML ON создание выходных данных только после завершения запроса.

Имя столбца Тип данных Description
session_id smallint Определяет сеанс, в котором выполняется этот запрос. Ссылка на dm_exec_sessions.session_id.
request_id int Идентифицирует целевой запрос. Ссылка на dm_exec_sessions.request_id.
sql_handle varbinary(64) Токен, однозначно определяющий пакет или хранимую процедуру, частью которой является запрос. Ссылка на dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Это токен, который уникально идентифицирует план выполнения запросов для выполненного пакета, план которого хранится в кэше планов или пребывает на этапе выполнения. Ссылается на dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Имя физического оператора.
node_id int Определяет узел оператора в дереве запросов.
thread_id int Используется для различения потоков (для параллельного запроса), принадлежащих одному узлу оператора запроса.
task_address varbinary(8) Определяет задачу SQLOS, используемую этим потоком. Ссылка на dm_os_tasks.task_address.
row_count bigint Число строк, возвращенных оператором к настоящему моменту.
rewind_count bigint Число сбросов к текущему моменту.
rebind_count bigint Число повторных привязок к текущему моменту.
end_of_scan_count bigint Количество окончаний просмотров к текущему моменту.
estimate_row_count bigint Предполагаемое количество строк Может быть полезным сравнение estimated_row_count с фактическим row_count.
first_active_time bigint Время, в миллисекундах, когда оператор был вызван первым.
last_active_time bigint Время, в миллисекундах, когда оператор был вызван последним.
open_time bigint Метка времени открытия (в миллисекундах).
first_row_time bigint Метка времени открытия первой строки (в миллисекундах.)
last_row_time bigint Метка времени открытия последней строки (в миллисекундах.)
close_time bigint Метка времени закрытия (в миллисекундах).
elapsed_time_ms bigint Общее время (в миллисекундах), используемое операциями целевого узла до сих пор.
cpu_time_ms bigint Общее время ЦП (в миллисекундах), используемое операциями целевого узла до сих пор.
database_id smallint Идентификатор базы данных, которая содержит объект, на котором выполняются операции чтения и записи.
object_id int Идентификатор объекта, на котором выполняются операции чтения и записи. Ссылки на sys.objects.object_id.
index_id int Индекс (если есть), для которого открыт набор строк.
scan_count bigint Количество просмотров таблиц и индексов к текущему моменту.
logical_read_count bigint Количество операций логического считывания к текущему времени.
physical_read_count bigint Количество операций физического считывания к текущему времени.
read_ahead_count bigint Количество операций упреждающего чтения к текущему времени.
write_page_count bigint Число операций записи страниц, вызванных сбросами, к текущему времени.
lob_logical_read_count bigint Количество операций логического считывания LOB к текущему времени.
lob_physical_read_count bigint Количество операций физического считывания LOB к текущему времени.
lob_read_ahead_count bigint Количество операций упреждающего чтения LOB к текущему времени.
segment_read_count int Количество операций упреждающего чтения сегментов к текущему времени.
segment_skip_count int Количество сегментов, пропущенных к текущему времени.
actual_read_row_count bigint Число строк, считываемых оператором до применения остаточного предиката.
estimated_read_row_count bigint Применимо: начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (SP1).
Число строк, считываемых оператором перед применением остаточного предиката.

Общие замечания

Если узел плана запроса не имеет операций ввода-вывода, все счетчики ввода-вывода имеют значение NULL.

Счетчики ввода-вывода, сообщаемые этим динамическим административным представлением, более детализированные, чем те, о которых сообщается SET STATISTICS IO следующими двумя способами:

  • SET STATISTICS IO группирует счетчики для всех операций ввода-вывода в определенную таблицу вместе. С помощью этого динамического административного представления вы получите отдельные счетчики для каждого узла в плане запроса, который выполняет операции ввода-вывода в таблицу.

  • Если есть параллельное сканирование, данное динамическое административное представление выдает счетчики для каждого из параллельных потоков, выполняющих сканирование.

Начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (SP1) стандартная инфраструктура профилирования выполнения запросов существует параллельно с инфраструктурой профилирования статистики выполнения упрощенных запросов. SET STATISTICS XML ONи SET STATISTICS PROFILE ON всегда используйте стандартную инфраструктуру профилирования статистики выполнения запросов. Для sys.dm_exec_query_profiles заполнения необходимо включить одну из инфраструктур профилирования запросов. Дополнительные сведения см. в разделе Инфраструктура профилирования запросов.

Примечание.

Запрос, который выполняется в ходе исследования, должен начинаться после включения инфраструктуры профилирования запросов, включив его после запуска запроса, не будет производить результаты sys.dm_exec_query_profiles. Дополнительные сведения о включении инфраструктуры профилирования запросов см. в разделе "Инфраструктура профилирования запросов".

Разрешения

  • Для SQL Server и Управляемый экземпляр SQL Azure требуется VIEW DATABASE STATE разрешение и членство db_owner в роли базы данных.
  • Для База данных SQL Azure уровня "Премиум" требуется VIEW DATABASE STATE разрешение в базе данных.
  • Для целей службы База данных SQL Azure Basic, S0 и S1, а также для баз данных в эластичных пулах требуется учетная запись администратора сервера или учетная запись администратора Microsoft Entra. Для всех остальных целей VIEW DATABASE STATE службы База данных SQL в базе данных требуется разрешение.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW DATABASE PERFORMANCE STATE для базы данных.

Примеры

Шаг 1. Вход в сеанс, в котором планируется выполнить запрос, с помощью sys.dm_exec_query_profilesкоторого вы будете анализировать. Настройка запроса для использования SET STATISTICS PROFILE ONпрофилирования. Выполните ваш запрос в данном сеансе.

--Configure query for profiling with sys.dm_exec_query_profiles  
SET STATISTICS PROFILE ON;  
GO  

--Or enable query profiling globally under SQL Server 2016 SP1 or above (not needed in SQL Server 2019)  
DBCC TRACEON (7412, -1);  
GO 
  
--Next, run your query in this session, or in any other session if query profiling has been enabled globally 

Шаг 2. Вход во второй сеанс, отличный от сеанса, в котором выполняется запрос.

Следующее выражение суммирует состояние, достигнутое текущим запросом в сеансе 54. Для этого оно рассчитывает общее число выходных строк со всех потоков для каждого узла, и сравнивает его с ожидаемым числом выходных строк для этого узла.

--Run this in a different session than the session in which your query is running. 
--Note that you may need to change session id 54 below with the session id you want to monitor.
SELECT node_id,physical_operator_name, SUM(row_count) row_count, 
  SUM(estimate_row_count) AS estimate_row_count, 
  CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  
FROM sys.dm_exec_query_profiles   
WHERE session_id=54
GROUP BY node_id,physical_operator_name  
ORDER BY node_id;  

См. также

Динамические административные представления и функции (Transact-SQL)
Связанные с выполнением динамические административные представления и функции (Transact-SQL)