Поделиться через


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: план содержит недопустимую спецификацию StarJoin
TIME_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_typeis_optimized_plan_forcing_disabledplan_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;