分享方式:


sys.dm_exec_requests (Transact-SQL)

適用於:Microsoft Fabric Microsoft網狀架構倉儲中的 SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析端點

傳回在 SQL Server 中執行之每項要求的相關資訊。 如需要求的詳細資訊,請參閱 線程和工作架構指南

注意

若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 中的專用 SQL 集區呼叫此專案,請參閱 sys.dm_pdw_exec_requests (Transact-SQL) 。 對於無伺服器 SQL 集區或 Microsoft Fabric,請使用 sys.dm_exec_requests

資料行名稱 資料類型 描述
session_id smallint 此要求相關之會話的標識碼。 不可為 Null。
request_id int 要求的識別碼。 會話內容中是唯一的。 不可為 Null。
start_time datetime 要求送達時的時間戳。 不可為 Null。
status nvarchar(30) 要求的狀態。 可以是下列值之一:

背景
rollback
執行中
可執行的
睡眠中
暫止

不可為 Null。
command nvarchar(32) 識別目前正在處理的命令類型。 常見的指令類型包括下列值:

SELECT
INSERT
UPDATE
刪除
BACKUP LOG
BACKUP DATABASE
DBCC
FOR

您可以搭配要求的 對應sql_handlesys.dm_exec_sql_text擷取要求的文字。 內部系統進程會根據其執行的工作類型來設定命令。 工作可以包含下列值:

LOCK MONITOR
CHECKPOINTLAZY
作家

不可為 Null。
sql_handle varbinary(64) 這是指唯一識別所屬批次或預存程序的 Token。 可為 Null。
statement_start_offset int 指出,以位元組為單位,從0開始,目前執行中批次或保存物件的目前執行語句的起始位置。 可與 、 statement_end_offsetsys.dm_exec_sql_text 動態管理函式搭配sql_handle使用,以擷取要求目前執行中的語句。 可為 Null。
statement_end_offset int 指出,以位元組為單位,從 0 開始,目前執行中批次或保存物件的目前執行語句結束位置。 可與 、 statement_start_offsetsys.dm_exec_sql_text 動態管理函式搭配sql_handle使用,以擷取要求目前執行中的語句。 可為 Null。
plan_handle varbinary(64) 這是指唯一識別目前執行中批次的查詢執行計劃所用的權杖。 可為 Null。
database_id smallint 要求執行所針對之資料庫的標識碼。 不可為 Null。

在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。
user_id int 提交要求的使用者標識碼。 不可為 Null。
connection_id uniqueidentifier 要求抵達之聯機的標識碼。 可為 Null。
blocking_session_id smallint 封鎖要求之工作階段的識別碼。 如果此數據行為 NULL0,則不會封鎖要求,或封鎖會話的會話信息無法使用(或無法識別)。 如需詳細資訊,請參閱 瞭解並解決 SQL Server 封鎖問題

-2 = 封鎖資源是由孤立的分散式交易所擁有。

-3 = 封鎖資源是由延後復原交易所擁有。

-4 = session_id 目前無法判斷封鎖闩鎖擁有者,因為內部闩鎖狀態轉換。

-5 = session_id 無法判斷封鎖閂鎖擁有者,因為它未追蹤此閂鎖類型(例如,針對SH閂鎖)。

blocking_session_id -5本身不會指出效能問題。 -5 表示會話正在等候異步動作完成。 在導入之前 -5 ,相同的會話會顯示 blocking_session_id 0,即使它仍處於等候狀態。

視工作負載而定,觀察 blocking_session_id = -5 可能是常見的情況。
wait_type nvarchar(60) 若要求目前被封鎖,這個資料行會傳回等候的類型。 可為 Null。

如需等候類型的相關信息,請參閱 sys.dm_os_wait_stats (Transact-SQL)
wait_time int 若要求目前被封鎖,這個資料行會傳回目前等候的持續時間 (以毫秒為單位)。 不可為 Null。
last_wait_type nvarchar(60) 如果這個要求先前被封鎖,這個資料行會傳回上次等候的類型。 不可為 Null。
wait_resource nvarchar(256) 如果目前封鎖要求,這個數據行會傳回要求目前正在等候的資源。 不可為 Null。
open_transaction_count int 針對此要求開啟的交易數目。 不可為 Null。
open_resultset_count int 為此要求開啟的結果集數目。 不可為 Null。
transaction_id bigint 執行此要求之交易的標識碼。 不可為 Null。
context_info varbinary(128) 會話CONTEXT_INFO值。 可為 Null。
percent_complete real 下列命令已完成的工作百分比:

ALTER INDEX REORGANIZE
AUTO_SHRINK 選項搭配 ALTER DATABASE
BACKUP DATABASE
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC INDEXDEFRAG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
RECOVERY
RESTORE DATABASE
ROLLBACK
TDE ENCRYPTION

不可為 Null。
estimated_completion_time bigint 僅限內部。 不可為 Null。
cpu_time int 要求所用的 CPU 時間 (以毫秒為單位)。 不可為 Null。
total_elapsed_time int 要求到達後所經過的總時間 (以毫秒為單位)。 不可為 Null。
scheduler_id int 排程此要求的排程器標識碼。 可為 Null。
task_address varbinary(8) 配置給與這個要求相關聯之工作的記憶體位址。 可為 Null。
reads bigint 這項要求所執行的讀取數。 不可為 Null。
writes bigint 這項要求所執行的寫入數。 不可為 Null。
logical_reads bigint 這項要求所執行的邏輯讀取數。 不可為 Null。
text_size int 此要求的 TEXTSIZE 設定。 不可為 Null。
language nvarchar(128) 要求的語言設定。 可為 Null。
date_format nvarchar(3) 要求的 DATEFORMAT 設定。 可為 Null。
date_first smallint 要求的 DATEFIRST 設定。 不可為 Null。
quoted_identifier bit 1 = QUOTED_IDENTIFIER要求為 ON。 否則為 0。

不可為 Null。
arithabort bit 1 = ARITHABORT 設定是要求的 ON。 否則為 0。

不可為 Null。
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON要求設定為 ON。 否則為 0。

不可為 Null。
ansi_defaults bit 1 = ANSI_DEFAULTS要求設定為 ON。 否則為 0。

不可為 Null。
ansi_warnings bit 1 = ANSI_WARNINGS要求設定為 ON。 否則為 0。

不可為 Null。
ansi_padding bit 1 = ANSI_PADDING要求設定為 ON。

否則為 0。

不可為 Null。
ansi_nulls bit 1 = ANSI_NULLS要求設定為 ON。 否則為 0。

不可為 Null。
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL要求設定為 ON。 否則為 0。

不可為 Null。
transaction_isolation_level smallint 建立此要求之交易的隔離等級。 不可為 Null。
0 = 未指定
1 = ReadUncomitted
2 = ReadCommitted
3 = 可重複
4 = 可串行化
5 = 快照集
lock_timeout int 鎖定此要求的逾時期間,以毫秒為單位。 不可為 Null。
deadlock_priority int 要求DEADLOCK_PRIORITY設定。 不可為 Null。
row_count bigint 此要求傳回給客戶端的數據列數目。 不可為 Null。
prev_error int 執行要求期間發生的最後一個錯誤。 不可為 Null。
nest_level int 目前在要求上執行的程式代碼巢狀層級。 不可為 Null。
granted_query_memory int 配置給要求執行查詢的頁面數目。 不可為 Null。
executing_managed_code bit 指出特定要求目前是否正在執行 Common Language Runtime 物件,例如例程、類型和觸發程式。 它已針對完整時間設定 Common Language Runtime 對象在堆疊上,即使從 Common Language Runtime 內執行 Transact-SQL 也一般。 不可為 Null。
group_id int 此查詢所屬之工作負載群組的標識碼。 不可為 Null。
query_hash binary(8) 查詢上計算的二進位哈希值,並用來識別具有類似邏輯的查詢。 您可以使用查詢哈希來判斷只有常值不同之查詢的匯總資源使用量。
query_plan_hash binary(8) 查詢執行計劃上計算的二進位哈希值,並用來識別類似的查詢執行計劃。 您可以使用查詢計劃哈希來尋找具有類似執行計劃之查詢的累計成本。
statement_sql_handle varbinary(64) 適用於:SQL Server 2014 (12.x) 和更新版本。

sql_handle 個別查詢的 。

如果未為資料庫啟用 查詢存放區,則此數據行為 NULL。
statement_context_id bigint 適用於:SQL Server 2014 (12.x) 和更新版本。

的選擇性外鍵。sys.query_context_settings

如果未為資料庫啟用 查詢存放區,則此數據行為 NULL。
dop int 適用於:SQL Server 2016 (13.x) 和更新版本。

查詢平行處理原則的程度。
parallel_worker_count int 適用於:SQL Server 2016 (13.x) 和更新版本。

如果這是平行查詢,則為保留的平行背景工作角色數目。
external_script_request_id uniqueidentifier 適用於:SQL Server 2016 (13.x) 和更新版本。

與目前要求相關聯的外部腳本要求標識碼。
is_resumable bit 適用於:SQL Server 2017 (14.x) 和更新版本。

指出要求是否為可繼續的索引作業。
page_resource binary(8) 適用於: SQL Server 2019 (15.x)

如果 wait_resource 數據行包含頁面,則為頁面資源的8位元組十六進位表示法。 如需詳細資訊,請參閱 sys.fn_PageResCracker
page_server_reads bigint 適用於:Azure SQL 資料庫 超大規模資料庫

此要求所執行的頁面伺服器讀取數目。 不可為 Null。
dist_statement_id uniqueidentifier 適用於:SQL Server 2022 和更新版本、Azure SQL 資料庫、Azure SQL 受控執行個體、Azure Synapse Analytics(僅限無伺服器集區),以及 Microsoft Fabric

所提交要求之語句的唯一標識符。 不可為 Null。

備註

若要執行 SQL Server 外部的程式代碼(例如擴充預存程式和分散式查詢),線程必須執行在非先佔排程器的控制之外執行。 若要這樣做,背景工作角色會切換到先占模式。 此動態管理檢視所傳回的時間值不包括在先佔模式中花費的時間。

在數據列模式執行平行要求時,SQL Server 會指派背景工作線程,以協調負責完成指派給他們的工作的背景工作線程。 在此 DMV 中,只有協調器線程才會顯示要求。 協調器線程的數據行 readswriteslogical_readsrow_count 不會更新 。 、、 last_wait_typewait_resourcegranted_query_memory 資料行wait_typewait_time只會更新協調器線程。 如需詳細資訊,請參閱執行緒與工作結構指南

數據wait_resource行包含與 sys.dm_tran_locks (Transact-SQL) 中類似的資訊resource_description但格式不同。

權限

如果使用者具有 VIEW SERVER STATE 伺服器的許可權,使用者就會在 SQL Server 實例上看到所有執行中的會話,否則使用者只會看到目前的會話。 VIEW SERVER STATE無法在 Azure SQL 資料庫 中授與,因此sys.dm_exec_requests一律僅限於目前的連線。

在可用性群組案例中,如果次要複本設定為唯讀意圖,則與次要複本的連線必須藉由新增 applicationintent=readonly,在 連接字串 參數中指定其應用程式意圖。 否則,即使存在許可權,VIEW SERVER STATE存取檢查sys.dm_exec_requests也不會傳遞可用性群組中的資料庫。

針對 SQL Server 2022 (16.x) 和更新版本, sys.dm_exec_requests 需要伺服器的 VIEW SERVER PERFORMANCE STATE 許可權。

範例

A. 尋找執行中批次的查詢文字

下列範例會查詢 sys.dm_exec_requests 以尋找有趣的查詢,並從輸出複製它 sql_handle

SELECT * FROM sys.dm_exec_requests;
GO

然後,若要取得語句文字,請使用複製 sql_handle 的 搭配系統函式 sys.dm_exec_sql_text(sql_handle)

SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO

B. 尋找執行中批次保留的所有鎖定

下列範例會查詢 sys.dm_exec_requests 以尋找有趣的批次,並從輸出複製其 transaction_id

SELECT * FROM sys.dm_exec_requests;
GO

然後,若要尋找鎖定資訊,請使用與 transaction_id 系統函式 sys.dm_tran_locks複製的 。

SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
    AND request_owner_id = < copied transaction_id >;
GO

C. 尋找所有目前封鎖的要求

下列範例會查詢 sys.dm_exec_requests 以尋找已封鎖要求的相關信息。

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. 依 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