Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
База данных SQL в Microsoft Fabric
Контролирует ход выполнения запросов в реальном времени. Например, используйте данное динамическое административное представление для определения, какая часть запроса выполняется медленно. Это динамическое административное представление можно объединять с другими за счет столбцов, определенных в поле описания. Или объедините данное динамическое административное представление с другими счетчиками производительности (такими как Системный Монитор, xperf), используя столбцы меток времени.
Возвращаемая таблица
Возвращаемые счетчики есть на каждом операторе и каждом потоке. Результаты являются динамическими и не соответствуют результатам существующих параметров, таких как SET STATISTICS XML ON создание выходных данных только после завершения запроса.
| Название столбца | Тип данных | Описание |
|---|---|---|
| идентификатор сессии | smallint | Определяет сеанс, в котором выполняется этот запрос. Ссылка на dm_exec_sessions.session_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) | Имя физического оператора. |
| идентификатор_узла | int | Определяет узел оператора в дереве запросов. |
| thread_id | int | Используется для различения потоков (для параллельного запроса), принадлежащих одному узлу оператора запроса. |
| адрес_задания | 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 | Метка времени закрытия (в миллисекундах). |
| время_истекло_мс | bigint | Общее время (в миллисекундах), используемое операциями целевого узла до сих пор. |
| cpu_time_ms | bigint | Общее время ЦП (в миллисекундах), используемое операциями целевого узла до сих пор. |
| идентификатор_базы_данных | 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 заполнения необходимо включить одну из инфраструктур профилирования запросов. Дополнительные сведения см. в разделе Инфраструктура профилирования запросов.
Note
Запрос, который выполняется в ходе исследования, должен начинаться после включения инфраструктуры профилирования запросов, включив его после запуска запроса, не будет производить результаты sys.dm_exec_query_profiles. Дополнительные сведения о включении инфраструктуры профилирования запросов см. в разделе "Инфраструктура профилирования запросов".
Permissions
- Для 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 и более поздних версий
Требуется VIEWDATABASE разрешение PERFORMANCE STATE в базе данных.
Examples
Шаг 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;