Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2019 (15.x) dan versi yang
lebih baru database Azure SQL Database
Azure SQL Managed Instance
SQL di Microsoft Fabric
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
- sys.dm_exec_query_stats
- sys.dm_exec_requests
- sys.dm_exec_procedure_stats
- sys.dm_exec_trigger_stats
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 orders aplikasi mungkin diberi nama orderproc;1, orderproc;2, dan sebagainya. Untuk ad hoc dan batch yang disiapkan, kolom ini null.Kolom dapat diubah ke null. |
encrypted |
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 bendera pelacakan 2451. Untuk mengaktifkan di tingkat database, gunakan LAST_QUERY_PLAN_STATS opsi di UBAH KONFIGURASI CAKUPAN DATABASE.
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 dan waktu eksekusi CPU kueri, 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.
dan
Kueri yang dijalankan bersifat kompleks atau memakan sumber daya.
Dalam kondisi berikut, output Showplan 1 yang
Rencananya dapat ditemukan di sys.dm_exec_cached_plans.
dan
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_handletelah dikeluarkan dari cache paket.or
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 SQL Server 2005 (9.x) Paket Layanan 2 dan versi yang lebih baru, query_plan kolom mengembalikan NULL.
Izin
SQL Server 2019 (15.x) dan versi yang lebih lama memerlukan VIEW SERVER STATE izin di server.
SQL Server 2022 (16.x) dan versi yang lebih baru memerlukan VIEW SERVER PERFORMANCE STATE izin di 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_statssistem .
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