sys.dm_exec_query_profiles (T-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure 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 keanggotaandb_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)