Udostępnij za pomocą


sys.query_store_plan (Transact-SQL)

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje usługi Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Database w usłudze Microsoft Fabric

Zawiera informacje o każdym planie wykonywania skojarzonym z zapytaniem.

Nazwa kolumny Typ danych Description
plan_id bigint Klucz podstawowy.
query_id bigint Klucz obcy. Sprzężenia do sys.query_store_query (Transact-SQL).
plan_group_id bigint Identyfikator grupy planów. Zapytania kursora zwykle wymagają wielu planów (wypełniania i pobierania). Wypełnij i pobierz plany, które są kompilowane razem, znajdują się w tej samej grupie.

0 oznacza, że plan nie należy do grupy.
engine_version nvarchar(32) Wersja aparatu używanego do kompilowania planu w <major>.<minor>.<build>.<revision> formacie.
compatibility_level smallint Poziom zgodności bazy danych, do której odwołuje się baza danych w zapytaniu.
query_plan_hash binary(8) Skrót MD5 pojedynczego planu.
query_plan nvarchar(max) Showplan XML dla planu zapytania.
is_online_index_plan bit Plan został użyty podczas kompilacji indeksu online.

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość 0.
is_trivial_plan bit Plan to trywialny plan (dane wyjściowe na etapie 0 optymalizatora zapytań).

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość 0.
is_parallel_plan bit Plan jest równoległy.

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość 1.
is_forced_plan bit Plan jest oznaczony jako wymuszony, gdy użytkownik wykonuje procedurę sys.sp_query_store_force_planskładowaną . Mechanizm wymuszania nie gwarantuje , że ten dokładny plan będzie używany dla zapytania, do którego odwołuje się query_idelement . Planowanie wymuszania powoduje ponowne skompilowanie zapytania i zazwyczaj tworzy dokładnie taki sam lub podobny plan do planu, do których odwołuje się plan_idprogram . Jeśli wymuszanie planu nie powiedzie się, force_failure_count jest zwiększane i last_force_failure_reason jest wypełniane przyczyną niepowodzenia.

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość 0.
is_natively_compiled bit Plan obejmuje natywnie skompilowane procedury zoptymalizowane pod kątem pamięci. (0 = FALSE, 1 = TRUE).

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość 0.
force_failure_count bigint Liczba przypadków, w których wymuszanie tego planu nie powiodło się. Można ją zwiększać tylko wtedy, gdy zapytanie jest ponownie skompilowane (nie w każdym wykonaniu). Resetowanie do 0 każdego czasu is_forced_plan jest zmieniane z FALSE na TRUE.

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość 0.
last_force_failure_reason int Przyczyna niepowodzenia wymuszania planu.

0: brak błędu, w przeciwnym razie numer błędu, który spowodował wymuszenie niepowodzenia
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
<inną wartość>: GENERAL_FAILURE

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość 0.
last_force_failure_reason_desc nvarchar(128) Tekstowy opis elementu last_force_failure_reason.

COMPILATION_ABORTED_BY_CLIENT: klient przerwał kompilację zapytania przed jego ukończeniem
ONLINE_INDEX_BUILD: zapytanie próbuje zmodyfikować dane, gdy tabela docelowa ma indeks tworzony w trybie online
OPTIMIZATION_REPLAY_FAILED: Nie można wykonać skryptu odtwarzania optymalizacji.
INVALID_STARJOIN: plan zawiera nieprawidłową specyfikację StarJoin
TIME_OUT: Optymalizator przekroczył liczbę dozwolonych operacji podczas wyszukiwania planu określonego przez wymuszony plan
NO_DB: Baza danych określona w planie nie istnieje
HINT_CONFLICT: Nie można skompilować kwerendy, ponieważ plan powoduje konflikt z wskazówką zapytania
DQ_NO_FORCING_SUPPORTED: Nie można wykonać zapytania, ponieważ plan powoduje konflikt z użyciem zapytań rozproszonych lub operacji pełnotekstowych.
NO_PLAN: Procesor zapytań nie może utworzyć planu zapytania, ponieważ nie można zweryfikować wymuszonego planu jako prawidłowego dla zapytania
NO_INDEX: Indeks określony w planie już nie istnieje
VIEW_COMPILE_FAILED: Nie można wymusić działania planu zapytania z powodu problemu w widoku indeksowanym, do którego odwołuje się plan
GENERAL_FAILURE: ogólny błąd wymuszania (nieobjęte innymi przyczynami)

Nuta: Usługa Azure Synapse Analytics zawsze zwraca wartość NONE.
count_compiles bigint Planowanie statystyk kompilacji.
initial_compile_start_time datetimeoffset Planowanie statystyk kompilacji.
last_compile_start_time datetimeoffset Planowanie statystyk kompilacji.
last_execution_time datetimeoffset Czas ostatniego wykonania odnosi się do czasu ostatniego zakończenia zapytania/planu.
avg_compile_duration float Planowanie statystyk kompilacji w mikrosekundach. Podziel przez 1000 000, aby uzyskać sekundy.
last_compile_duration bigint Planowanie statystyk kompilacji w mikrosekundach. Podziel przez 1000 000, aby uzyskać sekundy.
plan_forcing_type int Dotyczy: SQL Server 2017 (14.x) i nowsze wersje

Planowanie wymuszania typu.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Dotyczy: SQL Server 2017 (14.x) i nowsze wersje

Opis tekstu elementu plan_forcing_type.

NONE: Brak wymuszania planu
MANUAL: Planowanie wymuszone przez użytkownika
AUTO: Planowanie wymuszone przez automatyczne dostrajanie.
has_compile_replay_script bit Dotyczy: SQL Server 2022 (16.x) i nowsze wersje

Wskazuje, czy plan ma skojarzony skrypt odtwarzania optymalizacji:
0 = brak skryptu odtwarzania optymalizacji (żaden lub nawet nieprawidłowy).
1 = zarejestrowany skrypt odtwarzania optymalizacji.

Nie dotyczy usługi Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Dotyczy: SQL Server 2022 (16.x) i nowsze wersje

Wskazuje, czy zoptymalizowane wymuszanie planu zostało wyłączone dla planu:
0 = wyłączone.
1 = nie jest wyłączone.

Nie dotyczy usługi Azure Synapse Analytics.
plan_type int Dotyczy: SQL Server 2022 (16.x) i nowsze wersje

Typ planu.
0: Skompilowany plan
1: Plan dyspozytora
2. Plan wariantu zapytania

Nie dotyczy usługi Azure Synapse Analytics.
plan_type_desc nvarchar(120) Dotyczy: SQL Server 2022 (16.x) i nowsze wersje

Opis tekstowy typu planu.
Skompilowany plan: wskazuje, że plan jest planem niezwiązanym z parametrami zoptymalizowanym pod kątem planu
Plan dyspozytora: wskazuje, że plan jest planem zoptymalizowanym pod kątem parametrów planu dyspozytora
Plan wariantu zapytania: wskazuje, że plan jest planem zoptymalizowanym pod kątem wariantu zapytania z uwzględnieniem parametrów

Nie dotyczy usługi Azure Synapse Analytics.

Uwagi

Więcej niż jeden plan można wymusić, gdy magazyn zapytań dla replik pomocniczych jest włączony.

W usłudze Azure Synapse Analytics użycie kolumn has_compile_replay_script, is_optimized_plan_forcing_disabledplan_typeplan_type_desc powoduje Invalid Column Name wystąpienie błędu, ponieważ nie są obsługiwane. Zobacz Przykład B , aby zapoznać się z przykładem użycia sys.query_store_plan w usłudze Azure Synapse Analytics.

Planowanie wymuszania ograniczeń

Magazyn zapytań ma mechanizm wymuszania optymalizatora zapytań w celu korzystania z określonego planu wykonywania. Istnieją jednak pewne ograniczenia, które mogą uniemożliwić wymuszanie planu.

Po pierwsze, jeśli plan zawiera następujące konstrukcje:

  • Wstaw instrukcję zbiorczą
  • Odwołanie do tabeli zewnętrznej
  • Zapytania rozproszone lub operacje pełnotekstowe
  • Korzystanie z zapytań elastycznych
  • Kursory dynamiczne lub kluczowe
  • Nieprawidłowa specyfikacja sprzężenia gwiazdy

Uwaga / Notatka

Usługi Azure SQL Database i SQL Server 2019 i nowsze wersje kompilacji obsługują plan wymuszania dla kursorów statycznych i szybkich do przodu.

Po drugie, gdy obiekty, na których opiera się plan, nie są już dostępne:

  • Baza danych (jeśli baza danych, z której pochodzi plan, już nie istnieje)
  • Indeks (już nie istnieje lub wyłączony)

Na koniec problemy z samym planem:

  • Nie jest to legalne w przypadku kwerendy
  • Optymalizator zapytań przekroczył liczbę dozwolonych operacji
  • Niepoprawnie sformułowany kod XML planu

Permissions

VIEW DATABASE STATE Wymaga uprawnienia.

Przykłady

A. Znajdź przyczynę, dla której program SQL Server nie może wymusić planu za pośrednictwem usług QDS

Zwróć uwagę na kolumny last_force_failure_reason_desc i: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. Zapytanie w celu wyświetlenia wyników planu zapytania w usłudze Azure Synapse Analytics

Użyj następującego przykładowego zapytania, aby znaleźć 100 najnowszych planów wykonywania w magazynie zapytań w usłudze 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;