sys.dm_exec_query_profiles (Transact-SQL)
Контролирует ход выполнения запросов в реальном времени. Счетчики представлены для каждого оператора в каждом потоке. Собранные данные сериализуются в SHOWPLAN XML, когда запрос завершает работу. Это динамическое административное представление позволяет отслеживать ход выполнения запроса и определять, где запрос тратит больше всего времени. Это динамическое административное представление можно объединять с другими за счет столбцов, определенных в поле описания. Динамическое административное представление можно объединить с другими счетчиками производительности (например, системный монитор, xperf) с помощью столбцов меток времени.
Важно! |
---|
Чтобы вернуть информацию, необходимо установить SET STATISTICS PROFILE ON; или SET STATISTICS XML ON;. |
Применимо для следующих объектов: SQL Server (начиная с SQL Server 2014 до текущей версии). |
Возвращаемая таблица
Имя столбца |
Тип данных |
Описание |
---|---|---|
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 |
Количество окончаний просмотров к текущему моменту. |
first_active_time |
bigint |
Время первого вызова конструктора в миллисекундах. |
estimate_row_count |
bigint |
Предполагаемое количество строк Может быть полезно сравнить значение estimated_row_count с фактическим значением row_count. |
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 |
Общее затраченное время (в миллисекундах), аккумулированное операциями целевого узла (например, open, close и getrow) к текущему моменту. |
database_id |
smallint |
База данных, для которой открыт набор строк. |
object_id |
int |
Таблица, для которой открыт набор строк. |
index_id |
int |
Индекс (если есть), для которого открыт набор строк. |
scan_count |
bigint |
Количество просмотров таблиц и индексов к текущему моменту. |
logical_read_count |
bigint |
Количество операций логического считывания к текущему времени. |
physical_read_count |
bigint |
Количество операций физического считывания к текущему времени. |
read_ahead_count |
bigint |
Количество операций упреждающего чтения к текущему времени. |
write_page_count |
bigint |
Число операций записи страниц, вызванных сбросами, к текущему времени. |
lob_scan_count |
bigint |
Количество просмотров таблиц и индексов LOB к текущему моменту. |
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 |
Количество сегментов, пропущенных к текущему времени. |
Замечания
Столбцы идентификаторов — это первичные ключи для динамического административного представления и внешних ключей, связывающих его с другими динамическими административными представлениями. Счетчики относятся в основном к двум категориям: одна для накопительных счетчиков, например row_count elapsed_time_ms, а вторая для меток времени. Метки времени указывают время возникновения некоторых событий и могут использоваться для корреляции этих событий с внешними для SQL Server данными. Примеры таких данных: системный монитор, XPerf и т. д.
Счетчики предоставляют данные с большей степенью детализации, чем SET STATISTICS IO ON, поскольку они представлены для каждого итератора на поток. Количество потоков должно быть равно исходным результатам STATISTICS IO. Если у узла нет счетчиков ввода-вывода, поля SE имеют значение NULL.
Разрешения
Необходимо разрешение VIEW SERVER STATE на сервере.
Количество элементов связей
sys.dm_exec_query_profiles.session_id |
sys.dm_exec_sessions.session_id |
Один к одному |
sys.dm_exec_query_profiles.request_id |
sys.dm_exec_sessions.request_id |
Многие к одному |
sys.dm_exec_query_profiles.sql_handle |
sys.dm_exec_query_stats.sql_handle |
Многие к одному |
sys.dm_exec_query_profiles.plan_handle |
ys.dm_exec_query_stats.plan_handle |
Многие к одному |
sys.dm_exec_query_profiles.task_address |
sys.dm_os_tasks.task_address |
Многие к одному |
sys.dm_exec_query_profiles.database_id |
sys.databases.database_id |
Многие к одному |
sys.dm_exec_query_profiles.object_id |
sys.objects.object_id |
Многие к одному |
sys.dm_exec_query_profiles.index_id |
sys.indexes.index_id |
Многие к одному |
Примеры
Следующая инструкция возвращает сведения об операторах запросов.
SET STATISTICS PROFILE ON;
GO
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)