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)