共用方式為


sys.dm_exec_requests (Transact-SQL)

傳回在 SQL Server 內部執行之每個要求的相關資訊。

[!附註]

若要執行 SQL Server 外部的程式碼 (例如,擴充預存程序和分散式查詢),執行緒必須在非先佔式排程器的控制之外執行。若要這麼做,工作者必須切換到先佔式模式。這個動態管理檢視傳回的時間值不包括先佔式模式所花費的時間。

資料行名稱

資料類型

說明

session_id

smallint

這個要求相關的工作階段識別碼。不可為 Null。

request_id

int

要求的識別碼。在工作階段的內容中是唯一的。不可為 Null。

start_time

datetime

要求到達時的時間戳記。不可為 Null。

status

nvarchar(30)

要求的狀態。這可以是下列其中一項:

  • 背景

  • 執行中

  • 可執行的

  • 休眠中

  • 已暫停

不可為 Null。

command

nvarchar(16)

識別目前所處理命令的類型。常見命令類型包括下列項目:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • BACKUP LOG

  • BACKUP DATABASE

  • DBCC

  • WAITFOR

您可以使用 sys.dm_exec_sql_text 搭配要求的對應 sql_handle 來擷取要求的文字。內部系統處理序會根據其所執行工作的類型來設定命令。工作包括下列項目:

  • LOCK MONITOR

  • CHECKPOINTLAZY

  • WRITER

不可為 Null。

sql_handle

varbinary(64)

要求之 SQL 文字的雜湊對應。可為 Null。

statement_start_offset

int

目前執行的批次或預存程序中的字元數,目前執行的陳述式即從該處開始。可與 sql_handle、statement_end_offset 和 sys.dm_exec_sql_text 動態管理函數一起使用,來擷取該要求目前執行的陳述式。可為 Null。

statement_end_offset

int

目前執行的批次或預存程序中的字元數,目前執行的陳述式即在該處結束。可與 sql_handle、statement_end_offset 和 sys.dm_exec_sql_text 動態管理函數一起使用,來擷取該要求目前執行的陳述式。可為 Null。

plan_handle

varbinary(64)

SQL 執行計畫的雜湊對應。可為 Null。

database_id

smallint

要求執行目標的資料庫識別碼。不可為 Null。

user_id

int

提交要求之使用者的識別碼。不可為 Null。

connection_id

uniqueidentifier

要求到達所用連接的識別碼。可為 Null。

blocking_session_id

smallint

封鎖要求之工作階段的識別碼。如果這個資料行是 NULL,表示要求沒有被封鎖,或者封鎖工作階段的工作階段資訊無法使用 (或無法識別)。

-2 = 封鎖資源是由被遺棄的分散式交易所擁有。

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

-4 = 由於內部閂鎖狀態轉換,目前無法判斷封鎖閂鎖擁有者的工作階段識別碼。

wait_type

nvarchar(60)

若要求目前被封鎖,這個資料行會傳回等候的類型。可為 Null。

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

  • 含有 ALTER DATABASE 的 AUTO_SHRINK 選項

  • 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。

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)

針對查詢執行計畫所計算的二進位雜湊值,可用來識別類似的查詢執行計畫。您可以使用查詢計畫雜湊來尋找具有類似執行計畫之查詢的累計成本。如需詳細資訊,請參閱<使用查詢和查詢計畫雜湊來尋找並微調類似的查詢>。

權限

需要伺服器的 VIEW SERVER STATE 權限。

[!附註]

如果使用者具有伺服器的 VIEW SERVER STATE 權限,使用者會看到 SQL Server 執行個體上所有執行中的工作階段;否則,使用者只會看到目前的工作階段。

範例

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