sys.dm_exec_sql_text (Transact-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Mengembalikan teks batch SQL yang diidentifikasi oleh sql_handle yang ditentukan. Fungsi bernilai tabel ini menggantikan fungsi sistem fn_get_sql.
Sintaks
sys.dm_exec_sql_text(sql_handle | plan_handle)
Argumen
sql_handle
Adalah token yang secara unik mengidentifikasi batch yang telah dijalankan atau sedang dijalankan. sql_handle adalah varbinary(64).
sql_handle dapat diperoleh dari objek manajemen dinamis berikut:
plan_handle
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. 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. Untuk SQL statis dalam prosedur tersimpan, ID database yang berisi prosedur tersimpan. Jika tidak, null. |
objectid | int | ID objek. Adalah NULL untuk pernyataan ad hoc dan SQL yang disiapkan. |
number | smallint | Untuk prosedur tersimpan bernomor, kolom ini mengembalikan jumlah prosedur tersimpan. Untuk informasi selengkapnya, lihat sys.numbered_procedures (Transact-SQL). Adalah NULL untuk pernyataan ad hoc dan SQL yang disiapkan. |
Dienkripsi | bit | 1 = Teks SQL dienkripsi. 0 = Teks SQL tidak dienkripsi. |
text | nvarchar(maks ) | Teks kueri SQL. Adalah NULL untuk objek terenkripsi. |
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.
Keterangan
Untuk kueri ad hoc, handel SQL adalah nilai hash berdasarkan teks SQL yang dikirimkan ke server, dan dapat berasal dari database apa pun.
Untuk objek database seperti prosedur tersimpan, pemicu, atau fungsi, handel SQL berasal dari ID database, ID objek, dan nomor objek.
Handel rencana adalah nilai hash yang berasal dari rencana yang dikompilasi dari seluruh batch.
Catatan
dbid tidak dapat ditentukan dari sql_handle untuk kueri ad hoc. Untuk menentukan dbid untuk kueri ad hoc, gunakan plan_handle sebagai gantinya.
Contoh
J. Contoh Konseptual
Berikut ini adalah contoh dasar untuk mengilustrasikan meneruskan sql_handle baik secara langsung atau dengan CROSS APPLY.
Buat aktivitas.
Jalankan T-SQL berikut di jendela kueri baru di SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';
Menggunakan CROSS APPLY.
Sql_handle dari sys.dm_exec_requests akan diteruskan ke sys.dm_exec_sql_text menggunakan CROSS APPLY. Buka jendela kueri baru dan lewati spid yang diidentifikasi di langkah 1. Dalam contoh ini spid kebetulan59
.SELECT t.* FROM sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t WHERE session_id = 59 -- modify this value with your actual spid
Melewati sql_handle secara langsung.
Dapatkan sql_handle dari sys.dm_exec_requests. Kemudian, teruskan sql_handle langsung ke sys.dm_exec_sql_text. Buka jendela kueri baru dan teruskan spid yang diidentifikasi di langkah 1 ke sys.dm_exec_requests. Dalam contoh ini spid kebetulan59
. Kemudian teruskan sql_handle yang dikembalikan sebagai argumen ke sys.dm_exec_sql_text.-- acquire sql_handle SELECT sql_handle FROM sys.dm_exec_requests WHERE session_id = 59 -- modify this value with your actual spid -- pass sql_handle to sys.dm_exec_sql_text SELECT * FROM sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000) -- modify this value with your actual sql_handle
B. Mendapatkan informasi tentang lima kueri teratas menurut waktu CPU rata-rata
Contoh berikut mengembalikan teks pernyataan SQL dan waktu CPU rata-rata untuk lima kueri teratas.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC;
C. Menyediakan statistik eksekusi batch
Contoh berikut mengembalikan teks kueri SQL yang sedang dijalankan dalam batch dan memberikan informasi statistik tentang kueri tersebut.
SELECT s2.dbid,
s1.sql_handle,
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectid is null
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
Lihat juga
Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL)
Tampilan dan Fungsi Manajemen Dinamis Terkait Eksekusi (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (T-SQL)
sys.dm_exec_xml_handles (T-SQL)
sys.dm_exec_query_memory_grants (T-SQL)
Menggunakan APPLY
sys.dm_exec_text_query_plan (T-SQL)