sys.dm_exec_query_profiles (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Memantau kemajuan kueri real time saat kueri sedang dalam eksekusi. Misalnya, gunakan DMV ini untuk menentukan bagian kueri mana yang berjalan lambat. Gabungkan DMV ini dengan DMV sistem lain menggunakan kolom yang diidentifikasi di bidang deskripsi. Atau, gabungkan DMV ini dengan penghitung kinerja lain (seperti Monitor Performa, xperf) dengan menggunakan kolom tanda waktu.

Tabel Dikembalikan

Penghitung yang dikembalikan adalah per operator per utas. Hasilnya dinamis dan tidak cocok dengan hasil opsi yang ada seperti SET STATISTICS XML ON yang hanya membuat output saat kueri selesai.

Nama kolom Jenis data Deskripsi
id_sesi smallint Mengidentifikasi sesi di mana kueri ini berjalan. Referensi dm_exec_sessions.session_id.
request_id int Mengidentifikasi permintaan target. Referensi dm_exec_sessions.request_id.
sql_handle varbinary(64) Adalah token yang secara unik mengidentifikasi prosedur batch atau tersimpan yang menjadi bagian kueri. Referensi dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Adalah token yang secara unik mengidentifikasi rencana eksekusi kueri untuk batch yang telah dijalankan dan rencananya berada di cache rencana, atau saat ini sedang dijalankan. Referensi dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Nama operator fisik.
node_id int Mengidentifikasi simpul operator di pohon kueri.
thread_id int Membedakan utas (untuk kueri paralel) milik simpul operator kueri yang sama.
task_address varbinary(8) Mengidentifikasi tugas SQLOS yang digunakan utas ini. Referensi dm_os_tasks.task_address.
row_count bigint Jumlah baris yang dikembalikan oleh operator sejauh ini.
rewind_count bigint Jumlah putar balik sejauh ini.
rebind_count bigint Jumlah pengikatan ulang sejauh ini.
end_of_scan_count bigint Jumlah akhir pemindaian sejauh ini.
estimate_row_count bigint Perkiraan jumlah baris. Ini dapat berguna untuk membandingkan dengan estimated_row_count dengan row_count aktual.
first_active_time bigint Waktu, dalam milidetik, ketika operator pertama kali dipanggil.
last_active_time bigint Waktu, dalam milidetik, ketika operator terakhir dipanggil.
open_time bigint Tanda waktu saat terbuka (dalam milidetik).
first_row_time bigint Tanda waktu saat baris pertama dibuka (dalam milidetik).
last_row_time bigint Tanda waktu saat baris terakhir dibuka(dalam milidetik).
close_time bigint Tanda waktu saat ditutup (dalam milidetik).
elapsed_time_ms bigint Total waktu yang berlalu (dalam milidetik) yang digunakan oleh operasi simpul target sejauh ini.
cpu_time_ms bigint Total waktu CPU (dalam milidetik) digunakan oleh operasi simpul target sejauh ini.
database_id smallint ID database yang berisi objek tempat pembacaan dan penulisan sedang dilakukan.
object_id int Pengidentifikasi untuk objek tempat pembacaan dan penulisan sedang dilakukan. Referensi sys.objects.object_id.
index_id int Indeks (jika ada) set baris dibuka.
scan_count bigint Jumlah pemindaian tabel/indeks sejauh ini.
logical_read_count bigint Jumlah bacaan logis sejauh ini.
physical_read_count bigint Jumlah bacaan fisik sejauh ini.
read_ahead_count bigint Jumlah read-aheads sejauh ini.
write_page_count bigint Jumlah penulisan halaman sejauh ini karena tumpahan.
lob_logical_read_count bigint Jumlah pembacaan logis LOB sejauh ini.
lob_physical_read_count bigint Jumlah bacaan fisik LOB sejauh ini.
lob_read_ahead_count bigint Jumlah lob read-aheads sejauh ini.
segment_read_count int Jumlah segmen read-aheads sejauh ini.
segment_skip_count int Jumlah segmen yang dilewati sejauh ini.
actual_read_row_count bigint Jumlah baris yang dibaca oleh operator sebelum predikat residu diterapkan.
estimated_read_row_count bigint Berlaku untuk: Dimulai dengan SQL Server 2016 (13.x) SP1.
Jumlah baris yang diperkirakan dibaca oleh operator sebelum predikat residu diterapkan.

Keterangan Umum

Jika simpul rencana kueri tidak memiliki I/O, semua penghitung terkait I/O diatur ke NULL.

Penghitung terkait I/O yang dilaporkan oleh DMV ini lebih terperinci daripada yang dilaporkan oleh SET STATISTICS IO dalam dua cara berikut:

  • SET STATISTICS IO mengelompokkan penghitung untuk semua I/O ke tabel tertentu bersama-sama. Dengan DMV ini Anda akan mendapatkan penghitung terpisah untuk setiap simpul dalam rencana kueri yang melakukan I/O ke tabel.

  • Jika ada pemindaian paralel, DMV ini melaporkan penghitung untuk setiap utas paralel yang bekerja pada pemindaian.

Dimulai dengan SQL Server 2016 (13.x) SP1, infrastruktur pembuatan profil statistik eksekusi kueri standar ada berdampingan dengan infrastruktur pembuatan profil statistik eksekusi kueri yang ringan. SET STATISTICS XML ON dan SET STATISTICS PROFILE ON selalu gunakan infrastruktur pembuatan profil statistik eksekusi kueri standar. Agar sys.dm_exec_query_profiles dapat diisi, salah satu infrastruktur pembuatan profil kueri harus diaktifkan. Untuk informasi selengkapnya, lihat Infrastruktur Pembuatan Profil Kueri.

Catatan

Kueri yang sedang diselidiki harus dimulai setelah infrastruktur pembuatan profil kueri diaktifkan, mengaktifkannya setelah kueri dimulai tidak akan menghasilkan hasil dalam sys.dm_exec_query_profiles. Untuk informasi selengkapnya tentang cara mengaktifkan infrastruktur pembuatan profil kueri, lihat Infrastruktur Pembuatan Profil Kueri.

Izin

  • Di SQL Server dan Azure SQL Managed Instance, memerlukan VIEW DATABASE STATE izin dan keanggotaan db_owner peran database.
  • Pada Tingkat Premium Azure SQL Database, memerlukan VIEW DATABASE STATE izin dalam database.
  • Pada tujuan layanan Azure SQL Database Basic, S0, dan S1, dan untuk database di kumpulan elastis, akun admin server atau akun admin Microsoft Entra diperlukan. Pada semua tujuan layanan SQL Database lainnya, VIEW DATABASE STATE izin diperlukan dalam database.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA DATABASE pada database.

Contoh

Langkah 1: Masuk ke sesi di mana Anda berencana untuk menjalankan kueri yang akan Anda analisis dengan sys.dm_exec_query_profiles. Untuk mengonfigurasi kueri untuk pembuatan profil, gunakan SET STATISTICS PROFILE ON. Jalankan kueri Anda dalam sesi yang sama ini.

--Configure query for profiling with sys.dm_exec_query_profiles  
SET STATISTICS PROFILE ON;  
GO  

--Or enable query profiling globally under SQL Server 2016 SP1 or above (not needed in SQL Server 2019)  
DBCC TRACEON (7412, -1);  
GO 
  
--Next, run your query in this session, or in any other session if query profiling has been enabled globally 

Langkah 2: Masuk ke sesi kedua yang berbeda dari sesi tempat kueri Anda berjalan.

Pernyataan berikut ini meringkas kemajuan yang dibuat oleh kueri yang saat ini berjalan di sesi 54. Untuk melakukan ini, ini menghitung jumlah total baris output dari semua utas untuk setiap simpul, dan membandingkannya dengan perkiraan jumlah baris output untuk simpul tersebut.

--Run this in a different session than the session in which your query is running. 
--Note that you may need to change session id 54 below with the session id you want to monitor.
SELECT node_id,physical_operator_name, SUM(row_count) row_count, 
  SUM(estimate_row_count) AS estimate_row_count, 
  CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  
FROM sys.dm_exec_query_profiles   
WHERE session_id=54
GROUP BY node_id,physical_operator_name  
ORDER BY node_id;  

Lihat Juga

Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL)
Tampilan dan Fungsi Manajemen Dinamis Terkait Eksekusi (Transact-SQL)