Bagikan melalui


sys.dm_exec_query_statistics_xml (Transact-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed Instance SQL databasedi Microsoft Fabric

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

Sintaks

sys.dm_exec_query_statistics_xml(session_id)

Argumen

session_id

ID sesi yang menjalankan batch yang harus dicari. session_id adalah smallint. session_id dapat diperoleh dari objek manajemen dinamis berikut:

Tabel dikembalikan

Nama kolom Jenis Data Deskripsi
session_id smallint ID dari sesi. Tidak dapat diubah ke null.
request_id int ID permintaan. Tidak dapat diubah ke null.
sql_handle varbinary(64) Token yang secara unik mengidentifikasi prosedur batch atau tersimpan yang menjadi bagian kueri. Dapat bernilai null.
plan_handle varbinary(64) Token yang secara unik mengidentifikasi rencana eksekusi kueri untuk batch yang sedang dijalankan. Dapat bernilai 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 rencana dihasilkan untuk setiap batch yang mencakup, misalnya, pernyataan Transact-SQL ad hoc, panggilan prosedur tersimpan, dan panggilan fungsi yang ditentukan pengguna. Dapat bernilai null.

Keterbatasan

Karena kemungkinan terjadinya pelanggaran akses acak (AV) saat menjalankan prosedur tersimpan untuk pemantauan dengan sys.dm_exec_query_statistics_xml DMV, nilai atribut <ParameterList> XML Showplan ParameterRuntimeValue dihapus pada 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. Anda dapat mengaktifkan kembali nilai ini di SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19, dan versi yang lebih baru, menggunakan bendera pelacakan 2446. Bendera pelacakan ini memungkinkan pengumpulan nilai parameter runtime dengan biaya memperkenalkan overhead tambahan.

Perhatian

Bendera pelacakan 2446 tidak dimaksudkan untuk diaktifkan terus menerus di lingkungan produksi, tetapi hanya untuk tujuan pemecahan masalah yang terbatas waktu. Menggunakan bendera penelusuran ini dapat menyebabkan beban tambahan pada CPU dan memori yang mungkin signifikan, karena menghasilkan fragmen XML Showplan dengan informasi parameter runtime, terlepas dari apakah sys.dm_exec_query_statistics_xml DMV dipanggil atau tidak.

Di SQL Server 2022 (16.x), Azure SQL Database, dan Azure SQL Managed Instance, Anda dapat mencapai fungsionalitas yang sama di tingkat database menggunakan FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION opsi dalam ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Keterangan

Fungsi sistem ini tersedia dimulai dengan SQL Server 2016 (13.x) dengan Paket Layanan 1. Untuk informasi selengkapnya, lihat KB 3190871.

Fungsi sistem ini bekerja baik di infrastruktur profil statistik eksekusi kueri standar maupun ringan. Untuk informasi selengkapnya, lihat Infrastruktur Pembuatan Profil Kueri.

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

  • Jika rencana kueri yang sesuai dengan session_id yang ditentukan sudah tidak lagi dieksekusi, kolom query_plan pada tabel yang dikembalikan akan bernilai null. Misalnya, kondisi ini mungkin terjadi jika ada penundaan waktu antara ketika handel rencana ditangkap 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 SQL Server 2005 (9.x) Paket Layanan 2 dan versi yang lebih baru, kolom query_plan mengembalikan NULL.

Hak Akses

VIEW SERVER STATE Memerlukan izin di server, di SQL Server 2019 (15.x) dan versi yang lebih lama.

VIEW SERVER PERFORMANCE STATE Memerlukan izin di server, di SQL Server 2022 (16.x) dan versi yang lebih baru.

Memerlukan izin VIEW DATABASE STATE di dalam database pada tingkatan premium SQL Database.

Memerlukan admin Server atau akun admin Microsoft Entra pada Tingkat Standar dan Dasar SQL Database.

Contoh

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

Contoh kueri sys.dm_exec_requests berikut 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 salinan session_id dengan fungsi sys.dm_exec_query_statistics_xml sistem. Jalankan kueri ini dalam sesi yang berbeda dari sesi tempat kueri Anda berjalan.

SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO

Atau, digabungkan untuk semua permintaan yang sedang berjalan. Jalankan kueri ini dalam sesi yang berbeda dari sesi tempat kueri Anda berjalan.

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 AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO