sys.dm_exec_query_plan_stats (T-SQL)

Berlaku untuk: SQL Server 2019 (15.x) Azure SQL DatabaseAzure 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:

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 disederhanakandikembalikan 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_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

Baca juga