sys.query_store_plan (T-SQL)
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL Database Azure SQL Managed Instance Azure 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_plan tersimpan . 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 selesaiONLINE_INDEX_BUILD : kueri mencoba memodifikasi data saat tabel target memiliki indeks yang sedang dibangun secara onlineOPTIMIZATION_REPLAY_FAILED : Skrip pemutaran ulang pengoptimalan gagal dijalankan.INVALID_STARJOIN : paket berisi spesifikasi StarJoin yang tidak validTIME_OUT : Pengoptimal melebihi jumlah operasi yang diizinkan saat mencari rencana yang ditentukan oleh rencana paksaNO_DB : Database yang ditentukan dalam paket tidak adaHINT_CONFLICT : Kueri tidak dapat dikompilasi karena rencana bertentangan dengan petunjuk kueriDQ_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 kueriNO_INDEX : Indeks yang ditentukan dalam paket tidak ada lagiVIEW_COMPILE_FAILED : Tidak dapat memaksa rencana kueri karena masalah dalam tampilan terindeks yang direferensikan dalam paketGENERAL_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 memaksaMANUAL : Rencana dipaksa oleh penggunaAUTO : 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_disabled
plan_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 elastis
- 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;
Konten terkait
- Memantau performa dengan menggunakan Penyimpanan Kueri
- sys.database_query_store_options (T-SQL)
- sys.query_context_settings (T-SQL)
- sys.query_store_query (T-SQL)
- sys.query_store_query_text (T-SQL)
- sys.query_store_runtime_stats (T-SQL)
- sys.query_store_wait_stats (T-SQL)
- sys.query_store_runtime_stats_interval (T-SQL)
- Tampilan katalog sistem (Transact-SQL)
- Prosedur tersimpan Penyimpanan Kueri (Transact-SQL)