Aracılığıyla paylaş


sys.query_store_plan (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Microsoft Fabric'te Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsSQL veritabanı

Bir sorguyla ilişkili her yürütme planı hakkında bilgi içerir.

Sütun adı Veri türü Description
plan_id bigint Birincil anahtar.
query_id bigint Yabancı anahtar. sys.query_store_query (Transact-SQL) öğesine katılır.
plan_group_id bigint Plan grubunun kimliği. İmleç sorguları genellikle birden çok (doldurma ve getirme) planı gerektirir. Birlikte derlenen doldurma ve getirme planları aynı grupta yer alır.

0 , planın bir grupta olmadığı anlamına gelir.
engine_version nvarchar(32) Planı <major>.<minor>.<build>.<revision> biçimde derlemek için kullanılan altyapının sürümü.
compatibility_level smallint Sorguda başvuruda bulunan veritabanının veritabanı uyumluluk düzeyi.
query_plan_hash ikili (8) Tek tek planın MD5 karması.
query_plan nvarchar(max) Sorgu planı için showplan XML.
is_online_index_plan bit Plan, çevrimiçi dizin derlemesi sırasında kullanıldı.

Not: Azure Synapse Analytics her zaman döndürür 0.
is_trivial_plan bit Plan önemsiz bir plandır (sorgu iyileştiricisinin 0. aşamasında çıktı).

Not: Azure Synapse Analytics her zaman döndürür 0.
is_parallel_plan bit Plan paraleldir.

Not: Azure Synapse Analytics her zaman döndürür 1.
is_forced_plan bit Plan, kullanıcı saklı yordamı sys.sp_query_store_force_planyürütürken zorlamalı olarak işaretlenir. Zorlama mekanizması, tarafından başvuruda bulunılan sorgu için tam olarak bu planın kullanılacağını query_id. Plan zorlama, sorgunun yeniden derlenmiş olmasına neden olur ve genellikle tarafından plan_idbaşvuruda bulunılan plana tam olarak aynı veya benzer bir plan oluşturur. Plan zorlama başarılı olmazsa artırılır force_failure_count ve last_force_failure_reason hata nedeni ile doldurulur.

Not: Azure Synapse Analytics her zaman döndürür 0.
is_natively_compiled bit Plan, yerel olarak derlenmiş bellek için iyileştirilmiş yordamlar içerir. (0 = FALSE, 1 = TRUE).

Not: Azure Synapse Analytics her zaman döndürür 0.
force_failure_count bigint Bu planı zorlamanın başarısız olduğu süre. Yalnızca sorgu yeniden derlendiğinde artırılabilir (her yürütmede artırılamaz). 0 olarak is_forced_plan her değiştirildiğinde olarak sıfırlanır FALSETRUE.

Not: Azure Synapse Analytics her zaman döndürür 0.
last_force_failure_reason int Plan zorlamanın başarısız olmasının nedeni.

0: hata yok, aksi takdirde zorlamanın başarısız olmasına neden olan hatanın hata numarası
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
<diğer değer>: GENERAL_FAILURE

Not: Azure Synapse Analytics her zaman döndürür 0.
last_force_failure_reason_desc nvarchar(128) öğesinin last_force_failure_reasonmetinsel açıklaması.

COMPILATION_ABORTED_BY_CLIENT: client sorgu derlemesi tamamlanmadan önce durduruldu
ONLINE_INDEX_BUILD: hedef tabloda çevrimiçi olarak oluşturulan bir dizin varken sorgu verileri değiştirmeye çalışır
OPTIMIZATION_REPLAY_FAILED: İyileştirme yeniden yürütme betiği yürütülemedi.
INVALID_STARJOIN: plan geçersiz StarJoin belirtimi içeriyor
TIME_OUT: İyileştirici, zorlamalı plan tarafından belirtilen planı ararken izin verilen işlem sayısını aştı
NO_DB: Planda belirtilen bir veritabanı yok
HINT_CONFLICT: Plan bir sorgu ipucuyla çaktığı için sorgu derlenemiyor
DQ_NO_FORCING_SUPPORTED: Plan dağıtılmış sorgu veya tam metin işlemlerinin kullanımıyla çaktığı için sorgu yürütülemiyor.
NO_PLAN: Zorlamalı plan sorgu için geçerli olarak doğrulanamadığından sorgu işlemcisi sorgu planı üretemedi
NO_INDEX: Planda belirtilen dizin artık yok
VIEW_COMPILE_FAILED: Planda başvuruda bulunan dizinlenmiş görünümdeki bir sorun nedeniyle sorgu planı zorlanamadı
GENERAL_FAILURE: genel zorlama hatası (diğer nedenlerle ele alınmaz)

Not: Azure Synapse Analytics her zaman döndürür NONE.
count_compiles bigint Derleme istatistiklerini planlayın.
initial_compile_start_time datetimeoffset Derleme istatistiklerini planlayın.
last_compile_start_time datetimeoffset Derleme istatistiklerini planlayın.
last_execution_time datetimeoffset Son yürütme zamanı, sorgunun/planın son bitiş zamanına başvurur.
avg_compile_duration float Derleme istatistiklerini mikrosaniye olarak planlayın. Saniyeleri almak için 1.000.000'e bölün.
last_compile_duration bigint Derleme istatistiklerini mikrosaniye olarak planlayın. Saniyeleri almak için 1.000.000'e bölün.
plan_forcing_type int Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri

Zorlama türünü planlayın.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri

metin açıklaması plan_forcing_type.

NONE: Plan zorlama yok
MANUAL: Plan kullanıcı tarafından zorlandı
AUTO: Otomatik ayarlama ile zorlanan plan.
has_compile_replay_script bit Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri

Planın kendisiyle ilişkilendirilmiş bir iyileştirme yeniden yürütme betiği olup olmadığını gösterir:
0 = İyileştirme yeniden yürütme betiği yok (yok veya geçersiz).
1 = en iyi duruma getirme yeniden yürütme betiği kaydedildi.

Azure Synapse Analytics için geçerli değildir.
is_optimized_plan_forcing_disabled bit Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri

İyileştirilmiş plan zorlamasının plan için devre dışı bırakılıp bırakılmadığını gösterir:
0 = devre dışı.
1 = devre dışı değil.

Azure Synapse Analytics için geçerli değildir.
plan_type int Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri

Plan türü.
0: Derlenmiş Plan
1: Dağıtıcı Planı
2: Sorgu Değişken Planı

Azure Synapse Analytics için geçerli değildir.
plan_type_desc nvarchar(120) Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri

Plan türünün metin açıklaması.
Derlenmiş Plan: Planın parametreye duyarlı olmayan ve iyileştirilmiş bir plan olduğunu gösterir
Dağıtıcı Planı: Planın parametreye duyarlı plan için iyileştirilmiş dağıtıcı planı olduğunu gösterir
Sorgu Değişken Planı: Planın parametreye duyarlı plan için iyileştirilmiş sorgu değişken planı olduğunu gösterir

Azure Synapse Analytics için geçerli değildir.

Açıklamalar

İkincil çoğaltmalar için Sorgu Deposu etkinleştirildiğinde birden fazla plan zorlanabilir.

Azure Synapse Analytics'te , , has_compile_replay_scriptis_optimized_plan_forcing_disabledplan_type, sütunlarının plan_type_desckullanılması, desteklenmedikleri için bir Invalid Column Name hatayla sonuçlanır. Azure Synapse Analytics'te nasıl kullanılacağına ilişkin bir örnek için bkz. sys.query_store_plan.

Zorlama sınırlamalarını planlama

Sorgu Deposu'nun belirli yürütme planını kullanmak için Sorgu İyileştiricisi'ni zorunlu kılma mekanizması vardır. Ancak, bir planın uygulanmasını önleyebilecek bazı sınırlamalar vardır.

İlk olarak, plan aşağıdaki yapıları içeriyorsa:

  • Toplu deyim ekleme
  • Dış tablo başvurusu
  • Dağıtılmış sorgu veya tam metin işlemleri
  • Elastik sorguların kullanımı
  • Dinamik veya tuş kümesi imleçleri
  • Geçersiz yıldız birleştirme belirtimi

Uyarı

Azure SQL Veritabanı ve SQL Server 2019 ve sonraki derleme sürümleri, statik ve ileriye doğru imleçler için zorlama planını destekler.

İkincisi, planlayan nesneler artık kullanılabilir olmadığında:

  • Veritabanı (planın kaynağı olan veritabanı artık mevcut değilse)
  • Dizin (artık yok veya devre dışı)

Son olarak, planın kendisiyle ilgili sorunlar:

  • Sorgu için yasal değil
  • Sorgu İyileştirici izin verilen işlem sayısını aştı
  • Yanlış biçimlendirilmiş plan XML'i

Permissions

İzin gerektirir VIEW DATABASE STATE .

Örnekler

A. SQL Server'ın QDS aracılığıyla bir planı zorlayamama nedenini bulun

ve last_force_failure_reason_desc sütunlarına force_failure_count dikkat edin:

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'te sorgu planı sonuçlarını görüntüleme sorgusu

Azure Synapse Analytics'teki Sorgu Deposu'nda en son 100 yürütme planını bulmak için aşağıdaki örnek sorguyu kullanın.

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;