sys.query_store_plan (T-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Berisi informasi tentang setiap rencana eksekusi yang terkait dengan kueri.

Nama kolom Jenis data Deskripsi
plan_id bigint Kunci primer.
query_id bigint Kunci asing. Bergabung ke sys.query_store_query (Transact-SQL).
plan_group_id bigint ID grup paket. Kueri kursor biasanya memerlukan beberapa paket (isi dan ambil). Isi dan ambil paket yang dikompilasi bersama-sama berada dalam grup yang sama.

0 berarti rencana tidak berada dalam grup.
engine_version nvarchar(32) Versi mesin yang digunakan untuk mengkompilasi paket dalam <major>.<minor>.<build>.<revision> format.
compatibility_level smallint Tingkat kompatibilitas database database yang dirujuk dalam kueri.
query_plan_hash biner(8) Hash MD5 dari rencana individu.
query_plan nvarchar(maks) XML showplan untuk rencana kueri.
is_online_index_plan bit Paket digunakan selama build indeks online.

Catatan: Azure Synapse Analytics selalu mengembalikan 0.
is_trivial_plan bit Rencana adalah rencana sepele (output dalam tahap 0 pengoptimal kueri).

Catatan: Azure Synapse Analytics selalu mengembalikan 0.
is_parallel_plan bit Rencananya paralel.

Catatan: Azure Synapse Analytics selalu mengembalikan 1.
is_forced_plan bit Paket ditandai sebagai dipaksa ketika pengguna menjalankan prosedur sys.sp_query_store_force_plantersimpan . Mekanisme memaksa tidak menjamin bahwa paket yang tepat ini akan digunakan untuk kueri yang dirujuk oleh query_id. Rencana memaksa menyebabkan kueri dikompilasi lagi, dan biasanya menghasilkan rencana yang sama persis atau serupa dengan rencana yang dirujuk oleh plan_id. Jika memaksa rencana tidak berhasil, force_failure_count akan bertahap, dan last_force_failure_reason diisi dengan alasan kegagalan.

Catatan: Azure Synapse Analytics selalu mengembalikan 0.
is_natively_compiled bit Paket mencakup prosedur yang dioptimalkan memori yang dikompilasi secara asli. (0 = FALSE, 1 = TRUE).

Catatan: Azure Synapse Analytics selalu mengembalikan 0.
force_failure_count bigint Berapa kali paket ini gagal. Ini dapat bertahap hanya ketika kueri dikompresi ulang (bukan pada setiap eksekusi). Reset ke 0 setiap kali is_plan_forced diubah dari FALSE ke TRUE.

Catatan: Azure Synapse Analytics selalu mengembalikan 0.
last_force_failure_reason int Alasan mengapa rencana memaksa gagal.

0: tidak ada kegagalan, jika tidak, nomor kesalahan kesalahan yang menyebabkan memaksa gagal
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
<nilai> lainnya: GENERAL_FAILURE

Catatan: Azure Synapse Analytics selalu mengembalikan 0.
last_force_failure_reason_desc nvarchar(128) Deskripsi tekstual dari last_force_failure_reason.

COMPILATION_ABORTED_BY_CLIENT: kompilasi kueri yang dibatalkan klien sebelum selesai
ONLINE_INDEX_BUILD: kueri mencoba memodifikasi data saat tabel target memiliki indeks yang sedang dibangun secara online
OPTIMIZATION_REPLAY_FAILED: Skrip pemutaran ulang pengoptimalan gagal dijalankan.
INVALID_STARJOIN: paket berisi spesifikasi StarJoin yang tidak valid
TIME_OUT: Pengoptimal melebihi jumlah operasi yang diizinkan saat mencari rencana yang ditentukan oleh rencana paksa
NO_DB: Database yang ditentukan dalam paket tidak ada
HINT_CONFLICT: Kueri tidak dapat dikompilasi karena rencana bertentangan dengan petunjuk kueri
DQ_NO_FORCING_SUPPORTED: Tidak dapat menjalankan kueri karena rencana bertentangan dengan penggunaan kueri terdistribusi atau operasi teks lengkap.
NO_PLAN: Prosesor kueri tidak dapat menghasilkan rencana kueri, karena rencana paksa tidak dapat diverifikasi sebagai valid untuk kueri
NO_INDEX: Indeks yang ditentukan dalam paket tidak ada lagi
VIEW_COMPILE_FAILED: Tidak dapat memaksa rencana kueri karena masalah dalam tampilan terindeks yang direferensikan dalam paket
GENERAL_FAILURE: kesalahan memaksa umum (tidak tercakup dengan alasan lain)

Catatan: Azure Synapse Analytics selalu mengembalikan NONE.
count_compiles bigint Merencanakan statistik kompilasi.
initial_compile_start_time datetimeoffset Merencanakan statistik kompilasi.
last_compile_start_time datetimeoffset Merencanakan statistik kompilasi.
last_execution_time datetimeoffset Waktu eksekusi terakhir mengacu pada waktu akhir terakhir kueri/rencana.
avg_compile_duration float Rencanakan statistik kompilasi, dalam mikrostik. Bagi dengan 1.000.000 untuk mendapatkan detik.
last_compile_duration bigint Rencanakan statistik kompilasi, dalam mikrostik. Bagi dengan 1.000.000 untuk mendapatkan detik.
plan_forcing_type int Berlaku untuk: SQL Server 2017 (14.x) dan versi yang lebih baru

Jenis paksa paket.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Berlaku untuk: SQL Server 2017 (14.x) dan versi yang lebih baru

Deskripsi teks .plan_forcing_type

NONE: Tidak ada rencana memaksa
MANUAL: Rencana dipaksa oleh pengguna
AUTO: Rencana dipaksa oleh penyetelan otomatis.
has_compile_replay_script bit Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru

Menunjukkan apakah paket memiliki skrip pemutaran ulang pengoptimalan yang terkait dengannya:
0 = Tidak ada skrip pemutaran ulang pengoptimalan (tidak ada atau bahkan tidak valid).
1 = skrip pemutaran ulang pengoptimalan direkam.

Tidak berlaku untuk Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru

Menunjukkan apakah memaksa paket yang dioptimalkan dinonaktifkan untuk paket:
0 = dinonaktifkan.
1 = tidak dinonaktifkan.

Tidak berlaku untuk Azure Synapse Analytics.
plan_type int Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru

Jenis paket.
0: Paket yang Dikompilasi
1: Paket Dispatcher
2: Paket Varian Kueri

Tidak berlaku untuk Azure Synapse Analytics.
plan_type_desc nvarchar(120) Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru

Deskripsi teks jenis paket.
Paket yang Dikompilasi: Menunjukkan bahwa paket tersebut adalah rencana sensitif non-parameter yang dioptimalkan
Paket Dispatcher: Menunjukkan bahwa paket adalah paket parameter sensitif yang dioptimalkan paket dispatcher
Paket Varian Kueri: Menunjukkan bahwa paket tersebut adalah paket varian kueri yang dioptimalkan rencana sensitif parameter

Tidak berlaku untuk Azure Synapse Analytics.

Keterangan

Lebih dari satu paket dapat dipaksa saat Penyimpanan Kueri untuk replika sekunder diaktifkan.

Di Azure Synapse Analytics, menggunakan kolom has_compile_replay_script, , is_optimized_plan_forcing_disabledplan_type, plan_type_desc menghasilkan Invalid Column Name kesalahan karena tidak didukung. Lihat Contoh B untuk contoh cara menggunakan sys.query_store_plan di Azure Synapse Analytics.

Merencanakan pembatasan memaksa

Penyimpanan Kueri memiliki mekanisme untuk memberlakukan Pengoptimal Kueri untuk menggunakan rencana eksekusi tertentu. Namun, ada beberapa batasan yang dapat mencegah rencana diberlakukan.

Pertama, jika rencana berisi konstruksi berikut:

  • Sisipkan pernyataan massal
  • Referensi ke tabel eksternal
  • Kueri terdistribusi atau operasi teks lengkap
  • Penggunaan kueri global
  • Kursor dinamis atau set kunci
  • Spesifikasi gabungan bintang tidak valid

Catatan

Azure SQL Database dan SQL Server 2019 dan versi build yang lebih baru mendukung paket dukungan yang memaksa kursor statis dan maju cepat.

Kedua, ketika objek yang diandalkan paket, tidak lagi tersedia:

  • Database (jika database, tempat rencana berasal, tidak ada lagi)
  • Indeks (tidak lagi ada atau dinonaktifkan)

Akhirnya, masalah dengan rencana itu sendiri:

  • Tidak legal untuk kueri
  • Pengoptimal Kueri melebihi jumlah operasi yang diizinkan
  • XML rencana yang salah dibentuk

Izin

Memerlukan VIEW DATABASE STATE izin.

Contoh

J. Temukan alasan SQL Server tidak dapat memaksa paket melalui QDS

Perhatikan last_force_failure_reason_desc kolom dan 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. Kueri untuk menampilkan hasil rencana kueri di Azure Synapse Analytics

Gunakan kueri sampel berikut untuk menemukan 100 rencana eksekusi terbaru di Penyimpanan Kueri di 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;