Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Контролирует ход выполнения запросов в реальном времени. Например, используйте данное динамическое административное представление для определения, какая часть запроса выполняется медленно. Это динамическое административное представление можно объединять с другими за счет столбцов, определенных в поле описания. Или объедините данное динамическое административное представление с другими счетчиками производительности (такими как Системный Монитор, 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)