sys.dm_exec_requests (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse 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_requestsMicrosoft 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_offsetdan 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_offsetdan 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_id0, 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 readskoordinator. logical_readswrites Kolom , , last_wait_typewait_time, wait_resource, dan granted_query_memory hanya diperbarui untuk utas wait_typekoordinator. 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_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],
    [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