sys.dm_exec_requests (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Menampilkan informasi terkait setiap permintaan yang dijalankan dalam SQL Server. Untuk informasi selengkapnya tentang permintaan, lihat Panduan Arsitektur Utas dan Tugas.
Catatan
Untuk memanggil ini dari kumpulan SQL khusus di Azure Synapse Analytics atau Analytics Platform System (PDW), lihat sys.dm_pdw_exec_requests (Transact-SQL). Untuk kumpulan SQL tanpa server atau penggunaan sys.dm_exec_requests
Microsoft Fabric .
Nama kolom | Jenis data | Deskripsi |
---|---|---|
session_id |
smallint | ID sesi yang terkait dengan permintaan ini. Tidak dapat diubah ke null. |
request_id |
int | ID permintaan. Unik dalam konteks sesi. Tidak dapat diubah ke null. |
start_time |
datetime | Tanda waktu saat permintaan tiba. Tidak dapat diubah ke null. |
status |
nvarchar(30) | Status permintaan. Dapat berupa salah satu dari nilai berikut: latar belakang putar kembali dijalankan dapat dijalankan tidur ditangguhkan Tidak dapat diubah ke null. |
command |
nvarchar(32) | Mengidentifikasi jenis perintah saat ini yang sedang diproses. Jenis perintah umum mencakup nilai berikut: SELECT INSERT UPDATE DELETE LOG CADANGAN DATABASE CADANGAN DBCC FOR Teks permintaan dapat diambil dengan menggunakan sys.dm_exec_sql_text dengan yang sesuai sql_handle untuk permintaan tersebut. Proses sistem internal mengatur perintah berdasarkan jenis tugas yang mereka lakukan. Tugas bisa menyertakan nilai berikut:LOCK MONITOR CHECKPOINTLAZY PENULIS 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. |
statement_start_offset |
int | Menunjukkan, dalam byte, dimulai dengan 0, posisi awal pernyataan yang sedang dijalankan untuk batch yang sedang dijalankan atau objek yang bertahan. Dapat digunakan bersama dengan sql_handle , , statement_end_offset dan sys.dm_exec_sql_text fungsi manajemen dinamis untuk mengambil pernyataan yang sedang dijalankan untuk permintaan tersebut. Dapat diubah ke null. |
statement_end_offset |
int | Menunjukkan, dalam byte, dimulai dengan 0, posisi akhir dari pernyataan yang sedang dijalankan untuk batch yang sedang dijalankan atau objek yang bertahan. Dapat digunakan bersama dengan sql_handle , , statement_start_offset dan sys.dm_exec_sql_text fungsi manajemen dinamis untuk mengambil pernyataan yang sedang dijalankan untuk permintaan tersebut. 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. |
database_id |
smallint | ID database yang dieksekusi permintaan. Tidak dapat diubah ke null. Di Azure SQL Database, nilainya unik dalam satu database atau kumpulan elastis, tetapi tidak dalam server logis. |
user_id |
int | ID pengguna yang mengirimkan permintaan. Tidak dapat diubah ke null. |
connection_id |
pengidentifikasi unik | ID koneksi tempat permintaan tiba. Dapat diubah ke null. |
blocking_session_id |
smallint | ID sesi yang memblokir permintaan. Jika kolom ini adalah NULL atau 0 , permintaan tidak diblokir, atau informasi sesi sesi pemblokiran tidak tersedia (atau tidak dapat diidentifikasi). Untuk informasi selengkapnya, lihat Memahami dan mengatasi masalah pemblokiran SQL Server.-2 = Sumber daya pemblokiran dimiliki oleh transaksi terdistribusi tanpa intim. -3 = Sumber daya pemblokiran dimiliki oleh transaksi pemulihan yang ditangguhkan. -4 = session_id pemilik kait pemblokiran tidak dapat ditentukan saat ini karena transisi status kait internal.-5 = session_id pemilik kait pemblokiran tidak dapat ditentukan karena tidak dilacak untuk jenis kait ini (misalnya, untuk kait SH).Dengan sendirinya, blocking_session_id -5 tidak menunjukkan masalah performa. -5 adalah indikasi bahwa sesi sedang menunggu tindakan asinkron untuk diselesaikan. Sebelum -5 diperkenalkan, sesi yang sama akan ditampilkan blocking_session_id 0 , meskipun masih dalam keadaan tunggu.Tergantung pada beban kerja, pengamatan blocking_session_id = -5 mungkin merupakan kemunculan umum. |
wait_type |
nvarchar(60) | Jika permintaan saat ini diblokir, kolom ini mengembalikan jenis tunggu. Dapat diubah ke null. Untuk informasi tentang jenis tunggu, lihat sys.dm_os_wait_stats (Transact-SQL). |
wait_time |
int | Jika permintaan saat ini diblokir, kolom ini mengembalikan durasi dalam milidetik, dari penantian saat ini. Tidak dapat diubah ke null. |
last_wait_type |
nvarchar(60) | Jika permintaan ini sebelumnya telah diblokir, kolom ini mengembalikan jenis tunggu terakhir. Tidak dapat diubah ke null. |
wait_resource |
nvarchar(256) | Jika permintaan saat ini diblokir, kolom ini mengembalikan sumber daya yang permintaannya sedang menunggu. Tidak dapat diubah ke null. |
open_transaction_count |
int | Jumlah transaksi yang terbuka untuk permintaan ini. Tidak dapat diubah ke null. |
open_resultset_count |
int | Jumlah kumpulan hasil yang terbuka untuk permintaan ini. Tidak dapat diubah ke null. |
transaction_id |
bigint | ID transaksi tempat permintaan ini dijalankan. Tidak dapat diubah ke null. |
context_info |
varbinary(128) | CONTEXT_INFO nilai sesi. Dapat diubah ke null. |
percent_complete |
real | Persentase pekerjaan yang diselesaikan untuk perintah berikut:ALTER INDEX REORGANIZE AUTO_SHRINK opsi dengan ALTER DATABASE BACKUP DATABASE DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE RECOVERY RESTORE DATABASE ROLLBACK TDE ENCRYPTION Tidak dapat diubah ke null. |
estimated_completion_time |
bigint | Khusus internal. Tidak dapat diubah ke null. |
cpu_time |
int | Waktu CPU dalam milidetik yang digunakan oleh permintaan. Tidak dapat diubah ke null. |
total_elapsed_time |
int | Total waktu berlalu dalam milidetik sejak permintaan tiba. Tidak dapat diubah ke null. |
scheduler_id |
int | ID penjadwal yang menjadwalkan permintaan ini. Dapat diubah ke null. |
task_address |
varbinary(8) | Alamat memori dialokasikan untuk tugas yang terkait dengan permintaan ini. Dapat diubah ke null. |
reads |
bigint | Jumlah bacaan yang dilakukan oleh permintaan ini. Tidak dapat diubah ke null. |
writes |
bigint | Jumlah penulisan yang dilakukan oleh permintaan ini. Tidak dapat diubah ke null. |
logical_reads |
bigint | Jumlah pembacaan logis yang telah dilakukan oleh permintaan. Tidak dapat diubah ke null. |
text_size |
int | Pengaturan TEXTSIZE untuk permintaan ini. Tidak dapat diubah ke null. |
language |
nvarchar(128) | Pengaturan bahasa untuk permintaan. Dapat diubah ke null. |
date_format |
nvarchar(3) | Pengaturan DATEFORMAT untuk permintaan. Dapat diubah ke null. |
date_first |
smallint | Pengaturan DATEFIRST untuk permintaan. Tidak dapat diubah ke null. |
quoted_identifier |
bit | 1 = QUOTED_IDENTIFIER AKTIF untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
arithabort |
bit | 1 = Pengaturan ARITHABORT aktif untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
ansi_null_dflt_on |
bit | 1 = pengaturan ANSI_NULL_DFLT_ON AKTIF untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
ansi_defaults |
bit | 1 = pengaturan ANSI_DEFAULTS AKTIF untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
ansi_warnings |
bit | 1 = pengaturan ANSI_WARNINGS AKTIF untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
ansi_padding |
bit | 1 = pengaturan ANSI_PADDING AKTIF untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
ansi_nulls |
bit | 1 = pengaturan ANSI_NULLS AKTIF untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
concat_null_yields_null |
bit | 1 = pengaturan CONCAT_NULL_YIELDS_NULL AKTIF untuk permintaan. Jika tidak, itu adalah 0. Tidak dapat diubah ke null. |
transaction_isolation_level |
smallint | Tingkat isolasi tempat transaksi untuk permintaan ini dibuat. Tidak dapat diubah ke null. 0 = Tidak ditentukan 1 = ReadUncomitted 2 = ReadCommitted 3 = Dapat Diulang 4 = Dapat diserialisasi 5 = Rekam jepret |
lock_timeout |
int | Kunci periode waktu habis dalam milidetik untuk permintaan ini. Tidak dapat diubah ke null. |
deadlock_priority |
int | DEADLOCK_PRIORITY mengatur permintaan. Tidak dapat diubah ke null. |
row_count |
bigint | Jumlah baris yang telah dikembalikan ke klien berdasarkan permintaan ini. Tidak dapat diubah ke null. |
prev_error |
int | Kesalahan terakhir yang terjadi selama eksekusi permintaan. Tidak dapat diubah ke null. |
nest_level |
int | Tingkat kode berlapis saat ini yang dijalankan pada permintaan. Tidak dapat diubah ke null. |
granted_query_memory |
int | Jumlah halaman yang dialokasikan untuk eksekusi kueri pada permintaan. Tidak dapat diubah ke null. |
executing_managed_code |
bit | Menunjukkan apakah permintaan tertentu saat ini menjalankan objek runtime bahasa umum, seperti rutinitas, jenis, dan pemicu. ini diatur untuk waktu penuh objek runtime bahasa umum ada di tumpukan, bahkan saat menjalankan Transact-SQL dari dalam runtime bahasa umum. Tidak dapat diubah ke null. |
group_id |
int | ID grup beban kerja tempat kueri ini berada. Tidak dapat diubah ke null. |
query_hash |
biner(8) | Nilai hash biner dihitung pada kueri dan digunakan untuk mengidentifikasi kueri dengan logika serupa. Anda bisa menggunakan hash kueri untuk menentukan penggunaan sumber daya agregat untuk kueri yang hanya berbeda dengan nilai harfiah. |
query_plan_hash |
biner(8) | Nilai hash biner dihitung pada rencana eksekusi kueri dan digunakan untuk mengidentifikasi rencana eksekusi kueri serupa. Anda dapat menggunakan hash rencana kueri untuk menemukan biaya kumulatif kueri dengan rencana eksekusi serupa. |
statement_sql_handle |
varbinary(64) | Berlaku untuk: SQL Server 2014 (12.x) dan yang lebih baru.sql_handle kueri individual.Kolom ini adalah NULL jika Penyimpanan Kueri tidak diaktifkan untuk database. |
statement_context_id |
bigint | Berlaku untuk: SQL Server 2014 (12.x) dan yang lebih baru. Kunci asing opsional ke sys.query_context_settings .Kolom ini adalah NULL jika Penyimpanan Kueri tidak diaktifkan untuk database. |
dop |
int | Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru. Tingkat paralelisme kueri. |
parallel_worker_count |
int | Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru. Jumlah pekerja paralel yang dipesan jika ini adalah kueri paralel. |
external_script_request_id |
pengidentifikasi unik | Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru. ID permintaan skrip eksternal yang terkait dengan permintaan saat ini. |
is_resumable |
bit | Berlaku untuk: SQL Server 2017 (14.x) dan yang lebih baru. Menunjukkan apakah permintaan adalah operasi indeks yang dapat diulang. |
page_resource |
biner(8) | Berlaku untuk: SQL Server 2019 (15.x) Representasi heksadesimal 8-byte dari sumber daya halaman jika wait_resource kolom berisi halaman. Untuk informasi selengkapnya, lihat sys.fn_PageResCracker. |
page_server_reads |
bigint | Berlaku untuk: Azure SQL Database Hyperscale Jumlah pembacaan server halaman yang dilakukan oleh permintaan ini. Tidak dapat diubah ke null. |
dist_statement_id |
pengidentifikasi unik | Berlaku untuk: SQL Server 2022 dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (hanya kumpulan tanpa server), dan Microsoft Fabric ID unik untuk pernyataan untuk permintaan yang dikirimkan. Tidak dapat diubah ke null. |
Keterangan
Untuk menjalankan kode yang berada di luar SQL Server (misalnya, prosedur tersimpan yang diperluas dan kueri terdistribusi), utas harus dijalankan di luar kontrol penjadwal non-preemptive. Untuk melakukan ini, pekerja beralih ke mode preemptive. Nilai waktu yang dikembalikan oleh tampilan manajemen dinamis ini tidak menyertakan waktu yang dihabiskan dalam mode preemptive.
Saat menjalankan permintaan paralel dalam mode baris, SQL Server menetapkan utas pekerja untuk mengoordinasikan utas pekerja yang bertanggung jawab untuk menyelesaikan tugas yang ditetapkan kepada mereka. Dalam DMV ini, hanya utas koordinator yang terlihat untuk permintaan. Kolom , , , dan row_count
tidak diperbarui untuk utas reads
koordinator. logical_reads
writes
Kolom , , last_wait_type
wait_time
, wait_resource
, dan granted_query_memory
hanya diperbarui untuk utas wait_type
koordinator. Untuk informasi selengkapnya, lihat Panduan Arsitektur Utas dan Tugas.
Kolom wait_resource
berisi informasi resource_description
serupa dengan dalam sys.dm_tran_locks (Transact-SQL) tetapi diformat secara berbeda.
Izin
Jika pengguna memiliki VIEW SERVER STATE
izin di server, pengguna melihat semua sesi yang dijalankan pada instans SQL Server; jika tidak, pengguna hanya melihat sesi saat ini. VIEW SERVER STATE
tidak dapat diberikan di Azure SQL Database sehingga sys.dm_exec_requests
selalu terbatas pada koneksi saat ini.
Dalam skenario grup ketersediaan, jika replika sekunder diatur ke niat baca saja, koneksi ke sekunder harus menentukan niat aplikasinya dalam parameter string koneksi dengan menambahkan applicationintent=readonly
. Jika tidak, pemeriksaan sys.dm_exec_requests
akses untuk tidak lulus untuk database dalam grup ketersediaan, bahkan jika VIEW SERVER STATE
izin ada.
Untuk SQL Server 2022 (16.x) dan versi yang lebih baru, sys.dm_exec_requests
memerlukan izin TAMPILKAN STATUS PERFORMA SERVER di server.
Contoh
J. Menemukan teks kueri untuk batch yang sedang berjalan
Contoh kueri sys.dm_exec_requests
berikut untuk menemukan kueri yang menarik dan menyalinnya sql_handle
dari output.
SELECT * FROM sys.dm_exec_requests;
GO
Kemudian, untuk mendapatkan teks pernyataan, gunakan yang disalin sql_handle
dengan fungsi sys.dm_exec_sql_text(sql_handle)
sistem .
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. Temukan semua kunci yang dipegang batch yang sedang berjalan
Contoh kueri sys.dm_exec_requests
berikut untuk menemukan batch yang menarik dan menyalinnya transaction_id
dari output.
SELECT * FROM sys.dm_exec_requests;
GO
Kemudian, untuk menemukan informasi kunci, gunakan yang disalin transaction_id
dengan fungsi sys.dm_tran_locks
sistem .
SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
AND request_owner_id = < copied transaction_id >;
GO
C. Menemukan semua permintaan yang saat ini diblokir
Contoh kueri sys.dm_exec_requests
berikut untuk menemukan informasi tentang permintaan yang diblokir.
SELECT session_id,
status,
blocking_session_id,
wait_type,
wait_time,
wait_resource,
transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO
D. Memesan permintaan yang ada dengan CPU
SELECT
[req].[session_id],
[req].[start_time],
[req].[cpu_time] AS [cpu_time_ms],
OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
SUBSTRING(
REPLACE(
REPLACE(
SUBSTRING(
[ST].[text], ([req].[statement_start_offset] / 2) + 1,
((CASE [req].[statement_end_offset]
WHEN -1 THEN DATALENGTH([ST].[text])
ELSE [req].[statement_end_offset]
END - [req].[statement_start_offset]
) / 2
) + 1
), CHAR(10), ' '
), CHAR(13), ' '
), 1, 512
) AS [statement_text]
FROM
[sys].[dm_exec_requests] AS [req]
CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
[req].[cpu_time] DESC;
GO
Konten terkait
- Tampilan manajemen dinamis sistem
- Tampilan dan Fungsi Manajemen Dinamis Terkait Eksekusi (Transact-SQL)
- sys.dm_os_memory_clerks (T-SQL)
- sys.dm_os_sys_info (T-SQL)
- sys.dm_exec_query_memory_grants (T-SQL)
- sys.dm_exec_query_plan (T-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- SQL Server, objek Statistik SQL
- Panduan Arsitektur Pemrosesan Kueri
- Panduan arsitektur alur dan tugas
- Panduan penguncian transaksi dan penerapan versi baris
- Memahami dan menyelesaikan masalah pemblokiran SQL Server