Bagikan melalui


sys.dm_exec_query_statistics_xml (T-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL Database Azure SQL Managed Instance yang lebih baru

Mengembalikan rencana eksekusi kueri untuk permintaan dalam penerbangan. Gunakan DMV ini untuk mengambil XML showplan dengan statistik sementara.

Sintaks

sys.dm_exec_query_statistics_xml(session_id)  

Argumen

session_id
Apakah id sesi yang menjalankan batch akan dicari. session_id kecil. session_id dapat diperoleh dari objek manajemen dinamis berikut:

Tabel Dikembalikan

Nama kolom Jenis Data Deskripsi
id_sesi smallint ID sesi. Tidak dapat diubah ke null.
request_id int ID permintaan. Tidak dapat diubah ke null.
sql_handle varbinary(64) Adalah token yang secara unik mengidentifikasi prosedur batch atau tersimpan yang menjadi bagian kueri. Dapat diubah ke null.
plan_handle varbinary(64) Adalah token yang secara unik mengidentifikasi rencana eksekusi kueri untuk batch yang sedang dijalankan. Dapat diubah ke null.
query_plan xml Berisi representasi Showplan runtime dari rencana eksekusi kueri yang ditentukan dengan plan_handle berisi statistik parsial. 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. Dapat diubah ke null.

Keterangan

Penting

Memiliki kemungkinan pelanggaran akses acak (AV) saat menjalankan prosedur tersimpan pemantauan dengan sys.dm_exec_query_statistics_xml DMV, nilai ParameterRuntimeValue ParameterList> atribut <XML Showplan dihapus di SQL Server 2017 (14.x) CU 26 dan SQL Server 2019 (15.x) CU 12. Nilai ini dapat berguna saat memecahkan masalah prosedur tersimpan yang berjalan lama.

Dimulai dengan SQL Server 2017 (14.x) CU 31 dan SQL Server 2019 (15.x) CU 19, kumpulan nilai ParameterRuntimeValue ParameterList> atribut <XML Showplan telah diaktifkan kembali dengan dimasukkannya bendera pelacakan 2446. Bendera pelacakan ini memungkinkan pengumpulan nilai parameter runtime dengan biaya memperkenalkan overhead tambahan.

Peringatan

Bendera Pelacakan 2446 tidak dimaksudkan untuk diaktifkan terus menerus di lingkungan produksi, tetapi hanya untuk tujuan pemecahan masalah yang terbatas waktu. Menggunakan bendera pelacakan ini akan memperkenalkan tambahan dan mungkin overhead CPU dan memori yang signifikan karena kami akan membuat fragmen XML Showplan dengan informasi parameter runtime, apakah sys.dm_exec_query_statistics_xml DMV dipanggil atau tidak.

Catatan

Dimulai dengan SQL Server 2022 (16.x), Azure SQL Database, dan Azure SQL Managed Instance, untuk mencapainya di tingkat database, lihat opsi FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION dalam MENGUBAH KONFIGURASI CAKUPAN DATABASE (Transact-SQL).

Fungsi sistem ini tersedia dimulai dengan SQL Server 2016 (13.x) SP1. Lihat 3190871 KB

Fungsi sistem ini berfungsi di bawah infrastruktur pembuatan profil statistik eksekusi kueri standar dan ringan . Untuk informasi selengkapnya, lihat Infrastruktur Pembuatan Profil Kueri.

Dalam kondisi berikut, tidak ada output Showplan yang dikembalikan di kolom query_plan tabel yang dikembalikan untuk sys.dm_exec_query_statistics_xml:

  • Jika rencana kueri yang sesuai dengan session_id yang ditentukan tidak lagi dijalankan, kolom query_plan tabel yang dikembalikan null. Misalnya, kondisi ini dapat terjadi jika ada penundaan waktu antara ketika handel rencana diambil dan ketika digunakan dengan sys.dm_exec_query_statistics_xml.

Karena keterbatasan jumlah tingkat berlapis yang diizinkan dalam jenis data xml , sys.dm_exec_query_statistics_xml tidak 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, kolom query_plan mengembalikan NULL.

Izin

Di SQL Server, memerlukan VIEW SERVER STATE izin di server.
Pada Tingkat Premium SQL Database, memerlukan VIEW DATABASE STATE izin dalam database. Pada Tingkat Standar dan Dasar SQL Database, memerlukan admin Server atau akun admin Microsoft Entra.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Contoh

J. Melihat rencana kueri langsung dan statistik eksekusi untuk batch yang sedang berjalan

Contoh berikut mengkueri sys.dm_exec_requests untuk menemukan kueri yang menarik dan menyalinnya session_id dari output.

SELECT * FROM sys.dm_exec_requests;  
GO  

Kemudian, untuk mendapatkan rencana kueri langsung dan statistik eksekusi, gunakan yang disalin session_id dengan fungsi sistem sys.dm_exec_query_statistics_xml.

--Run this in a different session than the session in which your query is running.
SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);  
GO  

Atau digabungkan untuk semua permintaan yang sedang berjalan.

--Run this in a different session than the session in which your query is running.
SELECT 
	eqs.query_plan, 
	er.session_id, 
	er.request_id, 
	er.database_id,
	er.start_time,
	er.[status], 
	er.wait_type,
	er.wait_resource, 
	er.last_wait_type,
	(er.cpu_time/1000) AS cpu_time_sec,
	(er.total_elapsed_time/1000)/60 AS elapsed_time_minutes,
	(er.logical_reads*8)/1024 AS logical_reads_KB,
	er.granted_query_memory,
	er.dop,
	er.row_count, 
	er.query_hash, 
	er.query_plan_hash
FROM sys.dm_exec_requests er
	CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) eqs
WHERE er.session_id <> @@spid;
GO

Lihat Juga

Lacak Bendera
Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL)
Tampilan Manajemen Dinamis Terkait Database (Transact-SQL)