sys.dm_exec_query_plan_stats (T-SQL)
Berlaku untuk: SQL Server 2019 (15.x) Azure SQL Database Azure SQL Managed Instance
Mengembalikan setara dengan rencana eksekusi aktual terakhir yang diketahui untuk rencana kueri yang di-cache sebelumnya.
Sintaks
sys.dm_exec_query_plan_stats ( plan_handle )
Argumen
plan_handle
Token yang secara unik mengidentifikasi rencana eksekusi kueri untuk batch yang telah dijalankan dan rencananya berada di cache rencana, atau saat ini sedang dijalankan. plan_handle adalah varbinary(64).
plan_handle dapat diperoleh dari objek manajemen dinamis berikut:
- sys.dm_exec_cached_plans (T-SQL)
- sys.dm_exec_query_stats (Transact-SQL)
- sys.dm_exec_requests (Transact-SQL)
- sys.dm_exec_procedure_stats (T-SQL)
- sys.dm_exec_trigger_stats (T-SQL)
Tabel dikembalikan
Nama kolom | Jenis data | Deskripsi |
---|---|---|
dbid | smallint | ID database konteks yang berlaku ketika pernyataan Transact-SQL yang sesuai dengan rencana ini dikompilasi. Untuk pernyataan ad hoc dan SQL yang disiapkan, ID database tempat pernyataan dikompilasi. Kolom dapat diubah ke null. |
objectid | int | ID objek (misalnya, prosedur tersimpan atau fungsi yang ditentukan pengguna) untuk rencana kueri ini. Untuk ad hoc dan batch yang disiapkan, kolom ini null. Kolom dapat diubah ke null. |
number | smallint | Bilangan bulat prosedur tersimpan bernomor. Misalnya, sekelompok prosedur untuk aplikasi pesanan dapat diberi nama orderproc; 1, orderproc; 2, dan sebagainya. Untuk ad hoc dan batch yang disiapkan, kolom ini null. Kolom dapat diubah ke null. |
Dienkripsi | bit | Menunjukkan apakah prosedur tersimpan yang sesuai dienkripsi. 0 = tidak dienkripsi 1 = terenkripsi Kolom tidak dapat diubah ke null. |
query_plan | xml | Berisi representasi Showplan runtime terakhir yang diketahui dari rencana eksekusi kueri aktual yang ditentukan dengan plan_handle. Showplan dalam format XML. Satu paket dihasilkan untuk setiap batch yang berisi, misalnya pernyataan Transact-SQL ad hoc, panggilan prosedur tersimpan, dan panggilan fungsi yang ditentukan pengguna. Kolom dapat diubah ke null. |
Keterangan
Ini adalah fitur pilih ikut. Untuk mengaktifkan di tingkat server, gunakan Lacak Bendera 2451. Untuk mengaktifkan di tingkat database, gunakan opsi LAST_QUERY_PLAN_STATS di ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).
Fungsi sistem ini berfungsi di bawah infrastruktur pembuatan profil statistik eksekusi kueri yang ringan . Untuk informasi selengkapnya, lihat Infrastruktur Pembuatan Profil Kueri.
Output Showplan dengan sys.dm_exec_query_plan_stats
berisi informasi berikut:
- Semua informasi waktu kompilasi yang ditemukan dalam paket cache
- Informasi runtime seperti jumlah baris per operator yang sebenarnya, total waktu CPU kueri dan waktu eksekusi, peringatan tumpahan, DOP aktual, memori maksimum yang digunakan, dan memori yang diberikan
Dalam kondisi berikut, output Showplan yang setara dengan rencana eksekusi aktual dikembalikan di query_plan
kolom tabel yang dikembalikan untuk sys.dm_exec_query_plan_stats
:
Rencananya dapat ditemukan di sys.dm_exec_cached_plans.
AND
Kueri yang dijalankan bersifat kompleks atau memakan sumber daya.
Dalam kondisi berikut, output Showplan 1 yang disederhanakan dikembalikan di query_plan
kolom tabel yang dikembalikan untuk sys.dm_exec_query_plan_stats
:
Rencananya dapat ditemukan di sys.dm_exec_cached_plans.
AND
Kueri cukup sederhana, biasanya dikategorikan sebagai bagian dari beban kerja OLTP.
1 Mengacu pada Showplan yang hanya berisi operator simpul akar (SELECT).
Dalam kondisi berikut, tidak ada output yang dikembalikan dari sys.dm_exec_query_plan_stats
:
Rencana kueri yang ditentukan dengan menggunakan
plan_handle
telah dikeluarkan dari cache paket.ATAU
Paket kueri tidak dapat di-cache di tempat pertama. Untuk informasi selengkapnya, lihat Penembolokan dan Penggunaan Kembali Rencana Eksekusi.
Catatan
Batasan dalam jumlah tingkat berlapis yang diizinkan dalam tipe data xml , berarti tidak sys.dm_exec_query_plan
dapat mengembalikan rencana kueri yang memenuhi atau melebihi 128 tingkat elemen berlapis. Dalam versi SQL Server sebelumnya, kondisi ini mencegah rencana kueri kembali dan menghasilkan kesalahan 6335. Di Paket Layanan SQL Server 2005 (9.x) 2 dan versi yang lebih baru, query_plan
kolom mengembalikan NULL.
Izin
VIEW SERVER STATE
Memerlukan izin pada server.
Izin untuk SQL Server 2022 dan yang lebih baru
Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.
Contoh
J. Lihat rencana eksekusi kueri aktual terakhir yang diketahui untuk rencana cache tertentu
Contoh berikut mengkueri sys.dm_exec_cached_plans
untuk menemukan rencana menarik dan menyalinnya plan_handle
dari output.
SELECT * FROM sys.dm_exec_cached_plans;
GO
Kemudian, untuk mendapatkan rencana eksekusi kueri aktual terakhir yang diketahui, gunakan yang disalin plan_handle
dengan fungsi sys.dm_exec_query_plan_stats
sistem .
SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO
B. Lihat rencana eksekusi kueri aktual terakhir yang diketahui untuk semua paket yang di-cache
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO
C. Lihat rencana eksekusi kueri aktual terakhir yang diketahui untuk rencana cache dan teks kueri tertentu
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO
D. Lihat peristiwa yang di-cache untuk pemicu
SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype ='Trigger';
GO