Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
Azure SQL База данных
Azure SQL Управляемый экземпляр
SQL База данных в Microsoft Fabric
Ядро СУБД SQL Server предоставляет доступ к сведениям о среде выполнения по планам выполнения запросов. При возникновении проблемы с производительностью одним из самых важных действий является получение сведений о том, какая рабочая нагрузка выполняется в данный момент и каким образом происходит управление ресурсами. Таким образом, важно получить доступ к фактическому плану выполнения .
Несмотря на то, что для доступности действительного плана запроса необходимо дождаться завершения выполнения запроса, динамическая статистика запросов может анализировать процесс выполнения запроса в режиме реального времени, по мере передачи управления от одного оператора плана запроса другому. План динамического запроса отображает общую статистику выполнения запроса и статистику выполнения на уровне оператора, например количество созданных строк, время ожидания, ход выполнения оператора и т. д. Так как эти данные доступны в режиме реального времени без необходимости ожидать завершения запроса, эти статистические данные выполнения чрезвычайно полезны для отладки проблем с производительностью запросов, таких как длительные запросы, и запросы, которые выполняются бесконечно и никогда не завершаются.
Стандартная инфраструктура профилирования статистики выполнения запросов
Инфраструктуру профиля выполнения запросов или стандартную профилирование необходимо включить для сбора сведений о планах выполнения, а именно количестве строк, использовании ЦП и операций ввода-вывода. Следующие методы сбора сведений о плане выполнения для целевого сеанса используют стандартную инфраструктуру профилирования:
Примечание.
При выборе кнопки Включить статистику динамических запросов в SQL Server Management Studio используется стандартная инфраструктура профилирования. В более поздних версиях SQL Server, если включена упрощенная инфраструктура профилирования , она используется статистикой динамических запросов вместо стандартного профилирования при просмотре с помощью монитора действий или непосредственного запроса sys.dm_exec_query_profiles dmV .
Следующие методы сбора сведений о плане выполнения глобально для всех сеансов используют стандартную инфраструктуру профилирования:
- Расширенное
query_post_execution_showplanсобытие. Сведения о включении расширенных событий см. в разделе "Мониторинг системных действий с помощью расширенных событий". - Событие трассировки Showplan XML в SQL Trace и SQL Server Profiler. Дополнительные сведения об этом событии трассировки см. в Showplan XML Event Class.
При выполнении расширенного сеанса событий, использующего query_post_execution_showplan событие, sys.dm_exec_query_profiles dmV также заполняется, что обеспечивает статистику динамических запросов для всех сеансов, используя монитор действий или напрямую запрашивая динамическое динамическое представление. Дополнительные сведения см. в статье 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 событие, sys.dm_exec_query_profiles 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) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU11, если упрощенное профилирование не включено глобально, новый аргумент QUERY_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) и Azure SQL Database. В 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) с пакетом обновления 2 (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
- sys.dm_exec_query_profiles
- Установка флагов трассировки с помощью DBCC TRACEON (Transact-SQL)
- Справочник по операторам логического и физического плана выполнения
- Действительный план выполнения
- Динамическая статистика запросов