sys.query_store_plan (Transact-SQL)
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics
Содержит сведения о каждом плане выполнения, связанном с запросом.
Имя столбца | Тип данных | Description |
---|---|---|
plan_id |
bigint | Первичный ключ. |
query_id |
bigint | Внешний ключ. Соединяется с sys.query_store_query_text (Transact-SQL). |
plan_group_id |
bigint | Идентификатор группы планов. Для запросов курсоров обычно требуется несколько планов (заполнение и получение). Заполнение и выборка планов, скомпилированных вместе, находятся в одной группе.0 означает, что план не в группе. |
engine_version |
nvarchar(32) | Версия подсистемы, используемой для компиляции плана в <major>.<minor>.<build>.<revision> формате. |
compatibility_level |
smallint | Уровень совместимости базы данных, ссылку на которую содержит запрос. |
query_plan_hash |
binary(8) | Хэш MD5 отдельного плана. |
query_plan |
nvarchar(max) | Showplan XML для плана запроса. |
is_online_index_plan |
bit | План использовался во время построения индекса в режиме "в сети". Примечание. Azure Synapse Analytics всегда возвращается 0 . |
is_trivial_plan |
bit | План является обычным планом (вывод на этапе 0 оптимизатора запросов). Примечание. Azure Synapse Analytics всегда возвращается 0 . |
is_parallel_plan |
bit | План является параллельным. Примечание. Azure Synapse Analytics всегда возвращается 1 . |
is_forced_plan |
bit | План помечается как принудительный при выполнении хранимой процедуры sys.sp_query_store_force_plan пользователем. Механизм принудительного применения не гарантирует , что этот точный план будет использоваться для запроса, query_id на который ссылается ссылка. Принудительное выполнение плана приводит к повторной компиляции запроса и обычно создает точно тот же или аналогичный план, на который ссылается plan_id план. Если принудительное выполнение плана не выполнено, force_failure_count увеличивается и last_force_failure_reason заполняется причиной сбоя.Примечание. Azure Synapse Analytics всегда возвращается 0 . |
is_natively_compiled |
bit | План включает скомпилированные в собственном коде процедуры, оптимизированные для памяти. (0 = FALSE , 1 = TRUE ).Примечание. Azure Synapse Analytics всегда возвращается 0 . |
force_failure_count |
bigint | Количество неудачных попыток принудительного выполнения этого плана. Его можно увеличить только при повторной компиляции запроса (не при каждом выполнении). Сбрасывается на 0 каждый раз, когда is_plan_forced выполняется изменение FALSE TRUE .Примечание. Azure Synapse Analytics всегда возвращается 0 . |
last_force_failure_reason |
int | Причина, по которой принудительное выполнение плана завершилось сбоем. 0: без сбоя; в противном случае — номер ошибки, вызвавшей сбой принудительного выполнения 3617: COMPILATION_ABORTED_BY_CLIENT 8637: ONLINE_INDEX_BUILD 8675: OPTIMIZATION_REPLAY_FAILED 8683: INVALID_STARJOIN 8684: TIME_OUT 8689: NO_DB 8690: HINT_CONFLICT 8691: SETOPT_CONFLICT 8694: DQ_NO_FORCING_SUPPORTED 8698: NO_PLAN 8712: NO_INDEX 8713: VIEW_COMPILE_FAILED <другое значение>: GENERAL_FAILURE Примечание. Azure Synapse Analytics всегда возвращается 0 . |
last_force_failure_reason_desc |
nvarchar(128) | Текстовое last_force_failure_reason описание .COMPILATION_ABORTED_BY_CLIENT : прерванная компиляция запроса клиента до завершенияONLINE_INDEX_BUILD : запрос пытается изменить данные, а целевая таблица имеет индекс, созданный в СетиOPTIMIZATION_REPLAY_FAILED : не удалось выполнить скрипт воспроизведения оптимизации.INVALID_STARJOIN : план содержит недопустимую спецификацию StarJoinTIME_OUT : Оптимизатор превысил количество разрешенных операций при поиске плана, указанного в принудительном планеNO_DB : база данных, указанная в плане, не существуетHINT_CONFLICT : невозможно скомпилировать запрос, так как план конфликтует с указанием запросаDQ_NO_FORCING_SUPPORTED : не удается выполнить запрос, так как план конфликтует с использованием распределенных запросов или полнотекстовых операций.NO_PLAN : обработчик запросов не мог создать план запроса, так как принудительный план не удалось проверить как допустимый для запросаNO_INDEX : индекс, указанный в плане больше не существуетVIEW_COMPILE_FAILED : не удалось принудительно заставить план запроса из-за проблемы в индексированном представлении, на который ссылается планGENERAL_FAILURE : общая принудиющая ошибка (не охватывается другими причинами)Примечание. Azure Synapse Analytics всегда возвращается NONE . |
count_compiles |
bigint | Статистика компиляции плана. |
initial_compile_start_time |
datetimeoffset | Статистика компиляции плана. |
last_compile_start_time |
datetimeoffset | Статистика компиляции плана. |
last_execution_time |
datetimeoffset | Время последнего выполнения относится к последнему времени окончания запроса или плана. |
avg_compile_duration |
float | Планирование статистики компиляции в микросекундах. Разделить на 1000 000, чтобы получить секунды. |
last_compile_duration |
bigint | Планирование статистики компиляции в микросекундах. Разделить на 1000 000, чтобы получить секунды. |
plan_forcing_type |
int | Область применения: SQL Server 2017 (14.x) и более поздних версий Тип принудительного выполнения плана. 0: NONE 1: MANUAL 2: AUTO |
plan_forcing_type_desc |
nvarchar(60) | Область применения: SQL Server 2017 (14.x) и более поздних версий Текстовое plan_forcing_type описание .NONE : нет плана принудительного выполненияMANUAL : планирование, принудительное выполнение пользователемAUTO : планирование принудительная автоматическая настройка. |
has_compile_replay_script |
bit | Область применения: SQL Server 2022 (16.x) и более поздних версий Указывает, связан ли план со сценарием воспроизведения оптимизации: 0 = без сценария воспроизведения оптимизации (ни один или даже недопустимый). 1 = записанный сценарий воспроизведения оптимизации. Неприменимо к Azure Synapse Analytics. |
is_optimized_plan_forcing_disabled |
bit | Область применения: SQL Server 2022 (16.x) и более поздних версий Указывает, была ли отключена оптимизация принудительного выполнения плана: 0 = не выдается. 1 = не отключено. Неприменимо к Azure Synapse Analytics. |
plan_type |
int | Область применения: SQL Server 2022 (16.x) и более поздних версий Тип плана. 0. Скомпилированный план 1. План диспетчера 2. План варианта запроса Неприменимо к Azure Synapse Analytics. |
plan_type_desc |
nvarchar(120) | Область применения: SQL Server 2022 (16.x) и более поздних версий Текстовое описание типа плана. Скомпилированный план: указывает, что план является оптимизированным для непараметров планом. План диспетчера: указывает, что план является планом, оптимизированным для параметров, диспетчером План варианта запроса: указывает, что план является оптимизированным для параметра планом, оптимизированным для варианта запроса Неприменимо к Azure Synapse Analytics. |
Замечания
Несколько планов могут быть вынуждены при включении хранилище запросов для вторичных реплик.
В Azure Synapse Analytics, используя столбцы has_compile_replay_script
, plan_type
is_optimized_plan_forcing_disabled
plan_type_desc
приводит к ошибкеInvalid Column Name
, так как они не поддерживаются. Пример B см. в примере использования sys.query_store_plan
в Azure Synapse Analytics.
Ограничения принудительного использования планов
Хранилище запросов имеет механизм, позволяющий оптимизатору запросов принудительно применить определенный план выполнения. Но существуют некоторые ограничения, которые могут препятствовать применению плана.
Во-первых, когда план содержит следующие конструкции:
- Вставка групповой инструкции
- ссылка на внешнюю таблицу;
- распределенный запрос или полнотекстовые операции;
- Использование эластичных запросов
- Динамические курсоры или курсоры ключевого набора
- Недопустимая спецификация соединения типа "звезда"
Примечание.
База данных SQL Azure и SQL Server 2019 и более поздних версий плана поддержки планов сборки для статических и быстрых курсоров вперед.
Во-вторых, когда объекты, от которых зависит план, больше не доступны:
- База данных (если база данных, где был создан план, больше не существует)
- индекс (больше не существует или отключен).
Наконец, проблемы с самим планом:
- недопустим для запроса;
- оптимизатор запросов превысил количество разрешенных операций;
- неправильно сформированный XML-код плана.
Разрешения
Требуется разрешение VIEW DATABASE STATE
.
Примеры
А. Найдите причину, по которой SQL Server не удалось принудительно заставить план с помощью QDS
Обратите внимание на last_force_failure_reason_desc
столбцы и force_failure_count
выполните следующие действия:
SELECT TOP 1000
p.query_id,
p.plan_id,
p.last_force_failure_reason_desc,
p.force_failure_count,
p.last_compile_start_time,
p.last_execution_time,
q.last_bind_duration,
q.query_parameterization_type_desc,
q.context_settings_id,
c.set_options,
c.STATUS
FROM sys.query_store_plan p
INNER JOIN sys.query_store_query q
ON p.query_id = q.query_id
INNER JOIN sys.query_context_settings c
ON c.context_settings_id = q.context_settings_id
LEFT JOIN sys.query_store_query_text t
ON q.query_text_id = t.query_text_id
WHERE p.is_forced_plan = 1
AND p.last_force_failure_reason != 0;
B. Запрос для просмотра результатов плана запросов в Azure Synapse Analytics
Используйте следующий пример запроса, чтобы найти последние планы выполнения 100 в хранилище запросов в Azure Synapse Analytics.
SELECT TOP 100
plan_id,
query_id,
plan_group_id,
engine_version,
compatibility_level,
query_plan_hash,
query_plan,
is_online_index_plan,
is_trivial_plan,
is_parallel_plan,
is_forced_plan,
is_natively_compiled,
force_failure_count,
last_force_failure_reason,
last_force_failure_reason_desc,
count_compiles,
initial_compile_start_time,
last_compile_start_time,
last_execution_time,
avg_compile_duration,
last_compile_duration,
plan_forcing_type,
plan_forcing_type_desc
FROM sys.query_store_plan
ORDER BY last_execution_time DESC;
Связанный контент
- Мониторинг производительности с использованием хранилища запросов
- sys.database_query_store_options (Transact-SQL)
- sys.query_context_settings (Transact-SQL)
- sys.query_store_query (Transact-SQL)
- sys.query_store_query_text (Transact-SQL)
- sys.query_store_runtime_stats (Transact-SQL);
- sys.query_store_wait_stats (Transact-SQL)
- sys.query_store_runtime_stats_interval (Transact-SQL)
- Представления системного каталога (Transact-SQL)
- Хранимые процедуры хранилища запросов (Transact-SQL)