Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
Azure SQL База данных
Azure SQL Управляемый экземпляр
SQL База данных в Microsoft Fabric
Ядро СУБД SQL Server предоставляет доступ к сведениям времени выполнения о планах выполнения запросов. При возникновении проблемы с производительностью одним из самых важных действий является получение сведений о том, какая рабочая нагрузка выполняется в данный момент и каким образом происходит управление ресурсами. Таким образом, важно получить доступ к фактическому плану выполнения .
Несмотря на то, что для доступности действительного плана запроса необходимо дождаться завершения выполнения запроса, динамическая статистика запросов может анализировать процесс выполнения запроса в режиме реального времени, по мере передачи управления от одного оператора плана запроса другому. План динамического запроса отображает общую статистику выполнения запроса и статистику выполнения на уровне оператора, например количество созданных строк, время ожидания, ход выполнения оператора и т. д. Так как эти данные доступны в режиме реального времени без необходимости ожидать завершения запроса, эти статистические данные выполнения чрезвычайно полезны для отладки проблем с производительностью запросов, таких как длительные запросы, и запросы, которые выполняются бесконечно и никогда не завершаются.
Стандартная инфраструктура профилирования статистики выполнения запросов
Для сбора сведений о планах выполнения, включая количество строк, использование ЦП и операции ввода-вывода, необходимо включить инфраструктуру профиля статистики выполнения запросов, или стандартное профилирование. Следующие методы сбора сведений о плане выполнения для целевого сеанса используют стандартную инфраструктуру профилирования:
Примечание.
При выборе кнопки Включить статистику динамических запросов в SQL Server Management Studio используется стандартная инфраструктура профилирования. В более поздних версиях SQL Server, если включена облегченная инфраструктура профилирования, то она используется для статистики запросов в реальном времени вместо стандартного профилирования при просмотре через Activity Monitor или при прямом запросе к представлению динамического управления (DMV) sys.dm_exec_query_profiles.
Следующие методы сбора сведений о плане выполнения глобально для всех сеансов используют стандартную инфраструктуру профилирования:
- Расширенное
query_post_execution_showplanсобытие. Сведения о включении расширенных событий см. в разделе "Мониторинг системных действий с помощью расширенных событий". - Событие трассировки Showplan XML в SQL Trace и SQL Server Profiler. Дополнительные сведения об этом событии трассировки см. в Showplan XML Event Class.
При выполнении сеанса расширенных событий, в котором используется событие query_post_execution_showplan, также заполняется DMV sys.dm_exec_query_profiles, что позволяет получать оперативную статистику запросов для всех сеансов через Activity Monitor или путем прямого запроса к этому динамическому административному представлению. Дополнительные сведения см. в статье Live Query Statistics.
Инфраструктура профилирования статистики выполнения упрощенного запроса
Начиная с SQL Server 2014 (12.x) SP2 и SQL Server 2016 (13.x), была представлена новая облегченная инфраструктура профилирования статистики выполнения запросов, или упрощенное профилирование.
Примечание.
Хранимые процедуры с нативной компиляцией не поддерживаются при использовании упрощённого профилирования.
Упрощенная инфраструктура профилирования статистики выполнения запросов версии 1
Область применения: SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) до SQL Server 2016 (13.x).
Начиная с SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) и SQL Server 2016 (13.x), затраты на производительность для сбора сведений о планах выполнения были сокращены с введением упрощенного профилирования. В отличие от стандартного профилирования, упрощенное профилирование не собирает сведения о среде выполнения ЦП. Однако упрощенное профилирование по-прежнему собирает сведения о количестве строк и сведения об использовании операций ввода-вывода.
Также было добавлено новое расширенное событие query_thread_profile, использующее облегчённое профилирование. Это расширенное событие предоставляет статистику выполнения по операторам, позволяя получить больше сведений о производительности каждого узла и потока. Пример сеанса, использующий это расширенное событие, можно настроить следующим образом:
CREATE EVENT SESSION [NodePerfStats] ON SERVER
ADD EVENT sqlserver.query_thread_profile
(
ACTION (sqlos.scheduler_id,
sqlserver.database_id,
sqlserver.is_system,
sqlserver.plan_handle,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.server_instance_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text)
)
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Примечание.
Дополнительные сведения о снижении потребления ресурсов профилированием запросов см. в записи блога Developers Choice: Query progress - anytime, anywhere (Выбор разработчика: ход выполнения запроса — всегда и везде).
При выполнении сеанса расширенных событий, в котором используется событие query_thread_profile, DMV sys.dm_exec_query_profiles также заполняется с помощью облегченного профилирования, что позволяет получать статистику запросов в реальном времени для всех сеансов либо с помощью Activity Monitor, либо путем прямого запроса к DMV.
Упрощенная инфраструктура профилирования статистики выполнения запросов версии 2
Область применения: SQL Server 2016 (13.x) с пакетом обновления 1 (SP1) до SQL Server 2017 (14.x).
SQL Server 2016 (13.x) с пакетом обновления 1 (SP1) включает обновленную версию упрощенного профилирования с минимальными затратами. Упрощенное профилирование также можно включить глобально с помощью флага трассировки 7412 для версий, указанных ранее в разделе "Применимо". Представлена новая функция динамического управления данными sys.dm_exec_query_statistics_xml для предоставления плана выполнения запроса для запросов, находящихся в обработке.
Начиная с SQL Server 2016 (13.x) SP2 CU3 и SQL Server 2017 (14.x) CU11, если упрощенное профилирование не включено глобально, то для включения упрощенного профилирования на уровне отдельного запроса в любом сеансе можно использовать новый аргумент подсказки запроса USE HINT query hintQUERY_PLAN_PROFILE. Когда запрос, содержащий это новое указание, завершается, новое query_plan_profile расширенное событие также выводится, предоставляющее фактический XML-код плана выполнения, аналогичный расширенному query_post_execution_showplan событию.
Примечание.
Расширенное query_plan_profile событие также использует упрощенное профилирование, даже если указание запроса не используется.
Пример сеанса с помощью расширенного query_plan_profile события можно настроить следующим образом:
CREATE EVENT SESSION [PerfStats_LWP_Plan] ON SERVER
ADD EVENT sqlserver.query_plan_profile
(
ACTION (sqlos.scheduler_id,
sqlserver.database_id,
sqlserver.is_system,
sqlserver.plan_handle,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.server_instance_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text)
)
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Упрощенная инфраструктура профилирования статистики выполнения запросов версии 3
Область применения: SQL Server 2019 (15.x) и более поздних версий и База данных SQL Azure
SQL Server 2019 (15.x) и База данных SQL Azure включают в себя только что измененную версию упрощенного профилирования, собирающую сведения о количестве строк для всех выполнений. Включение упрощенного профилирования производится по умолчанию в SQL Server 2019 (15.x) и База данных SQL Azure. В SQL Server 2019 (15.x) и более поздних версиях флаг трассировки 7412 не действует. Облегченное профилирование можно отключить на уровне базы данных с помощью LIGHTWEIGHT_QUERY_PROFILINGконфигурации уровня базы данных: ALTER DATABASE SCOPED CONFIGURATION SET LIGHTWEIGHT_QUERY_PROFILING = OFF;
Появилась новая функция динамического управления sys.dm_exec_query_plan_stats, которая возвращает эквивалент последнего известного действительного плана выполнения для большинства запросов и называется статистика плана последнего запроса. Последняя статистика плана запросов может быть включена на уровне базы данных с помощью LAST_QUERY_PLAN_STATSконфигурации с областью действия базы данных: ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;
Новое query_post_execution_plan_profile расширенное событие собирает эквивалент фактического плана выполнения, основанный на облегченном профилировании, тогда как query_post_execution_showplan использует стандартное профилирование. SQL Server 2017 (14.x) также предлагает это событие, начиная с CU14. Пример сеанса с помощью расширенного query_post_execution_plan_profile события можно настроить следующим образом:
CREATE EVENT SESSION [PerfStats_LWP_All_Plans] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
(
ACTION (sqlos.scheduler_id,
sqlserver.database_id,
sqlserver.is_system,
sqlserver.plan_handle,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.server_instance_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text)
)
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Пример 1. Сеанс расширенных событий с использованием стандартного профилирования
CREATE EVENT SESSION [QueryPlanOld] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan
(
ACTION (sqlos.task_time,
sqlserver.database_id,
sqlserver.database_name,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.sql_text)
)
ADD TARGET package0.event_file
(
SET filename = N'C:\Temp\QueryPlanStd.xel'
)
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Пример 2. Сеанс расширенных событий на основе упрощенного профилирования
CREATE EVENT SESSION [QueryPlanLWP] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
(
ACTION (sqlos.task_time,
sqlserver.database_id,
sqlserver.database_name,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.sql_text)
)
ADD TARGET package0.event_file
(
SET filename = N'C:\Temp\QueryPlanLWP.xel'
)
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Руководство по использованию инфраструктуры профилирования запросов
В приведенной ниже таблице перечислены действия по включению стандартного или упрощенного профилирования глобально (на уровне сервера) или в одном сеансе. Также включена информация о первой версии, в которой доступно это действие.
| Область | Стандартное профилирование | Легковесное профилирование |
|---|---|---|
| Глобальный | Расширенный query_post_execution_showplan сеанс событий с XE; Начиная с SQL Server 2012 (11.x) |
Флаг трассировки 7412; Начиная с SQL Server 2016 (13.x) SP1 |
| Глобальный | Трассировка SQL и профилировщик SQL Server с событием трассировки Showplan XML |
Сеанс расширенных событий с query_thread_profile XE; Начиная с SQL Server 2014 (12.x) SP2 |
| Глобальный | N/A | Расширенный query_post_execution_plan_profile сеанс событий с XE; Начиная с SQL Server 2017 (14.x) CU14 и SQL Server 2019 (15.x) |
| Сеанс | Используйте SET STATISTICS XML ON |
QUERY_PLAN_PROFILE Используйте указание запроса вместе с сеансом расширенного события с query_plan_profile XE; Начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU11 |
| Сеанс | Используйте SET STATISTICS PROFILE ON |
N/A |
| Сеанс | Нажмите кнопку "Статистика динамических запросов " в SSMS; Начиная с SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) | N/A |
Замечания
Внимание
Из-за возможного нарушения доступа к памяти при выполнении хранимой процедуры мониторинга, которая ссылается на sys.dm_exec_query_statistics_xml, убедитесь, что обновление KB 4078596 установлено в SQL Server 2016 (13.x) и SQL Server 2017 (14.x).
Начиная с упрощенного профилирования версии 2 и его низкой нагрузки, любой сервер, который еще не привязан к ЦП, может непрерывно выполнять упрощенное профилирование и разрешать специалистам по базам данных в любое время выполнять любое выполнение, например с помощью монитора активности или непосредственного запроса sys.dm_exec_query_profiles, и получить план запроса со статистикой среды выполнения.
Дополнительные сведения о снижении потребления ресурсов профилированием запросов см. в записи блога Developers Choice: Query progress - anytime, anywhere (Выбор разработчика: ход выполнения запроса — всегда и везде).
Расширенные события, использующие упрощенное профилирование, используют сведения о стандартном профилировании, если инфраструктура профилирования уже включена. Допустим, запущен сеанс расширенных событий query_post_execution_showplan, и запускается еще один сеанс событий query_post_execution_plan_profile. Второй сеанс по-прежнему использует сведения из стандартного профилирования.
Примечание.
В SQL Server 2017 (14.x) упрощенное профилирование отключено по умолчанию, но активируется при запуске трассировки расширенных событий, на которую используется использование query_post_execution_plan_profile , а затем деактивируется снова при остановке трассировки. В результате, если трассировки расширенных событий на основе query_post_execution_plan_profile часто запускаются и остановлены на экземпляре SQL Server 2017 (14.x), следует активировать упрощенное профилирование на глобальном уровне с флагом трассировки 7412, чтобы избежать повторяющихся затрат на активацию и деактивацию.
Связанный контент
- Наблюдение и настройка производительности
- Средства мониторинга производительности и настройки
- Открытие монитора действий в SQL Server Management Studio (SSMS)
- Монитор активности
- Мониторинг производительности с использованием хранилища запросов
- Мониторинг активности системы с помощью расширенных событий
- sys.dm_exec_query_statistics_xml (Transact-SQL)
- sys.dm_exec_query_profiles (Transact-SQL)
- Установка флагов трассировки с помощью DBCC TRACEON (Transact-SQL)
- Справочник по операторам логического и физического плана выполнения
- Отображение фактического плана выполнения
- Статистика запросов в реальном времени