sys.dm_exec_requests (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure Synapse Analytics
Mengembalikan informasi tentang 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, gunakan sys.dm_exec_requests.
| Nama kolom | Jenis data | Deskripsi |
|---|---|---|
| id_sesi | 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: Background Berjalan Dapat dijalankan Tidur Ditangguhkan Tidak dapat diubah ke null. |
| perintah | 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 sql_handle yang sesuai untuk permintaan tersebut. Proses sistem internal mengatur perintah berdasarkan jenis tugas yang mereka lakukan. Tugas bisa menyertakan nilai berikut: MONITOR KUNCI 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 saat ini dijalankan untuk batch yang sedang dijalankan atau objek yang bertahan. Dapat digunakan bersama dengan sql_handlestatement_end_offset, , dan sys.dm_exec_sql_text fungsi manajemen dinamis untuk mengambil pernyataan yang saat ini dijalankan untuk permintaan tersebut. Dapat diubah ke null. |
| statement_end_offset | int | Menunjukkan, dalam byte, dimulai dengan 0, posisi akhir dari pernyataan yang saat ini dieksekusi untuk objek batch atau persisten yang sedang dijalankan. Dapat digunakan bersama dengan sql_handlestatement_start_offset, , dan sys.dm_exec_sql_text fungsi manajemen dinamis untuk mengambil pernyataan yang saat ini dijalankan untuk permintaan tersebut. Dapat diubah ke null. |
| plan_handle | varbinary(64) | Adalah token yang secara unik mengidentifikasi rencana eksekusi kueri untuk batch yang saat ini dijalankan. Dapat diubah ke null. |
| database_id | smallint | ID database yang dieksekusi permintaan. Tidak dapat diubah ke null. |
| user_id | int | ID pengguna yang mengirimkan permintaan. Tidak dapat diubah ke null. |
| id_koneksi | pengidentifikasi unik | ID koneksi tempat permintaan tiba. Dapat diubah ke null. |
| blocking_session_id | smallint | ID sesi yang memblokir permintaan. Jika kolom ini NULL atau sama dengan 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 sumber. -3 = Sumber daya pemblokiran dimiliki oleh transaksi pemulihan yang ditangguhkan. -4 = ID Sesi pemilik latch pemblokiran tidak dapat ditentukan saat ini karena transisi status kait internal. -5 = ID Sesi pemilik latch 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 menunjukkan blocking_session_id 0, meskipun masih dalam keadaan tunggu. Tergantung pada beban kerja, mengamati -5 karena blocking_session_id mungkin merupakan kejadian 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 (SQL Transact). |
| wait_time | int | Jika permintaan saat ini diblokir, kolom ini mengembalikan durasi dalam milidetik, dari waktu tunggu 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 saat ini 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 tataan hasil yang terbuka untuk permintaan ini. Tidak dapat diubah ke null. |
| id_transaksi | bigint | ID transaksi tempat permintaan ini dijalankan. Tidak dapat diubah ke null. |
| context_info | varbinary(128) | CONTEXT_INFO nilai sesi. Dapat diubah ke null. |
| persen_selesai | nyata | Persentase pekerjaan yang diselesaikan untuk perintah berikut: UBAH REORGANISASI INDEKS AUTO_SHRINK opsi dengan ALTER DATABASE DATABASE CADANGAN DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE PEMULIHAN PULIHKAN DATABASE ROLLBACK ENKRIPSI TDE 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 yang 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. |
| baca | bigint | Jumlah bacaan yang dilakukan oleh permintaan ini. Tidak dapat diubah ke null. |
| tulis | 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. |
| bahasa | nvarchar(128) | Pengaturan bahasa untuk permintaan. Dapat diubah ke null. |
| date_format | nvarchar(3) | Pengaturan DATEFORMAT untuk permintaan tersebut. 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 dengan transaksi untuk permintaan ini dibuat. tidak dapat diubah ke null. 0 = Tidak ditentukan 1 = ReadUncomitted 2 = ReadCommitted 3 = Dapat diulang 4 = Dapat diserialisasikan 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 pengaturan untuk 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 menangani 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 untuk 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. |
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 , writes, logical_reads, dan row_counttidak diperbarui untuk utas readskoordinator. Kolom , , wait_timelast_wait_type, wait_resource, dan granted_query_memoryhanya diperbarui untuk utas wait_typekoordinator. Untuk informasi selengkapnya, lihat Panduan Arsitektur Utas dan Tugas.
Izin
Jika pengguna memiliki VIEW SERVER STATE izin di server, pengguna akan melihat semua sesi eksekusi pada instans SQL Server; jika tidak, pengguna hanya akan melihat sesi saat ini. VIEW SERVER STATEtidak dapat diberikan dalam Azure SQL Database sehingga sys.dm_exec_requests selalu terbatas pada koneksi saat ini.
Dalam skenario Always-On, 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 akses untuk sys.dm_exec_requests tidak akan meneruskan database dalam grup ketersediaan, bahkan jika VIEW SERVER STATE izin ada.
Contoh
A. 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. Menemukan 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_lockssistem .
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
, cpu_time 'cpu_time_ms'
, object_name(st.objectid,st.dbid) 'ObjectName'
, substring
(REPLACE
(REPLACE
(SUBSTRING
(ST.text
, (req.statement_start_offset/2) + 1
, (
(CASE 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 cpu_time desc;
GO
Lihat juga
- Tampilan dan Fungsi Manajemen Dinamis
- Tampilan dan Fungsi Manajemen Dinamis Terkait Eksekusi
- sys.dm_os_memory_clerks
- sys.dm_os_sys_info
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_plan
- sys.dm_exec_sql_text
- SQL Server, Objek Statistik SQL
- Panduan Arsitektur Pemrosesan Kueri
- Panduan Arsitektur Utas dan Tugas