SQL Server 系統表介紹:sys.dm_exec_requests


針對 SQL Server 內正在執行的每個請求返回一行。sys.dm_exec_connections、sys.dm_exec_sessions 和sys.dm_exec_requests 服務器范圍動態管理視圖映射到 sys.sysprocesses 系統視圖(先前為系統表)。

 
若要執行在 SQL Server 以外的代碼(例如,擴展存儲過程和分布式查詢),則必須在非搶先計划程序的控制范圍以外執行該線程。若要這樣做,工作線程將切換到搶先模式。由此動態管理視圖返回的時間值不包括在搶先模式下花費的時間。

 

 

列名 數據類型 說明

session_id

smallint

與此請求相關的會話的 ID。不可為空值。

request_id

int

請求的 ID。在會話的上下文中是唯一的。不可為空值。

start_time

datetime

計划運行請求的時間。不可為空值。

status

nvarchar(60)

請求的狀態。可能的值包括:

  • 后台。請求是后台線程,例如資源監視器或死鎖監視器。
  • 正在運行。請求正在運行。
  • 可運行。請求正在運行,由於仲裁不足,因此要臨時進行妥善安排。
  • 睡眠。沒有要做的工作。
  • 掛起。請求正在等待工作線程選取。
  • 已掛起。請求正在等待某個事件。

不可為空值。

command

nvarchar(32)

標識正在處理的命令的類型。常用命令類型包括:

  • SELECT 
  • INSERT 
  • UPDATE 
  • DELETE 
  • BACKUP LOG 
  • BACKUP DB 
  • DBCC 
  • WAITFOR 

通過結合使用 sys.dm_exec_sql_text 動態管理函數和請求的相應 sql_handle,可以檢索該請求的文本。內部系統進程將基於它們所執行的任務類型來設置該命令。這些任務可以包括:

  • LOCK MONITOR
  • CHECKPOINTLAZY
  • WRITER

不可為空值。

sql_handle

varbinary(64)

請求的 SQL 語句句柄。該句柄可用於通過sys.dm_exec_sql_text 動態管理函數檢索實際語句文本。不可為空值。

statement_start_offset

int

執行批處理或存儲過程中的執行語句的開始字符位置。可以與statement_end_offset、sys.dm_exec_sql_text 動態管理函數和 sql_handle 一起使用,為請求檢索正在執行的語句。可為空值。

statement_end_offset

int

執行批處理或存儲過程中正在執行的語句的結束字符位置。可以與statement_start_offset、sys.dm_exec_sql_text 動態管理函數和 sql_handle 一起使用,為請求檢索正在執行的語句。可為空值。

plan_handle

varbinary(64)

請求的查詢計划句柄。若要查看查詢計划,請結合使用sys.dm_exec_query_plan 動態管理函數。若要查詢計划緩存,請使用 sys.dm_exec_cached_plans 動態管理視圖。若要查看計划屬性,請使用 sys.dm_exec_plan_attributes 函數。可為空值。

database_id

smallint

正在運行請求的數據庫的 ID。有關詳細的數據庫信息,請查詢sys.databases 目錄視圖;或者,若要獲得數據庫名稱,請使用db_name() 內部函數。不可為空值。

user_id

int

正在運行請求的用戶 ID。有關詳細的用戶信息,請查詢sys.database_principals 目錄視圖。不可為空值。

connection_id

uniqueidentifier

請求到達時所采用的連接的 ID。有關物理或邏輯連接的詳細信息,請查詢 sys.dm_exec_connections 動態管理視圖。可為空值。

blocking_session_id

smallint

正在阻塞請求的會話的 ID。如果此列為 0,則表示請求未被阻塞,或者鎖定會話的信息不可用或無法進行標識。

-2 = 阻塞資源由孤立的分布式事務擁有。

-3 = 阻塞資源由延遲的恢復事務擁有。

-4 = 由於內部閂鎖狀態轉換而無法確定阻塞閂鎖所有者的會話 ID。

wait_type

nvarchar(60)

如果請求被阻塞,則此列返回等待類型。可為空值。

wait_time

int

如果請求被阻塞,則此列返回當前等待的持續時間(毫秒)。不可為空值。

last_wait_type

nvarchar(64)

如果此請求先前已經阻塞,則此列返回上次等待的類型。不可為空值。

wait_resource

nvarchar(512)

如果請求被阻塞,則此列返回正在等待請求的資源。不可為空值。

open_transaction_count

int

為此請求打開的事務數。不可為空值。

open_resultset_count

int

為此請求打開的結果集的個數。不可為空值。

transaction_id

bigint

在其中執行此請求的事務的 ID。對於 SQL Server 實例,該 ID 是唯一的。用來查詢sys.dm_tran_active_transactions、sys.dm_tran_locks或 sys.dm_tran_database_transactions 動態管理視圖。不可為空值。

context_info

varbinary(128)

請求的 SET CONTEXT_INFO 語句的值。可為空值。

percent_complete

real

為某些操作(包括回滾)完成的工作的百分比。

 
此操作不提供查詢的進度數據。
ms177648.note(zh-cn,SQL.90).gif注意:

 

不可為空值。

estimated_completion_time

bigint

僅供內部使用。不可為空值。

cpu_time

int

請求所使用的 CPU 時間(毫秒)。不可為空值。

total_elapsed_time

int

請求到達后經過的總時間(毫秒)。不可為空值。

scheduler_id

int

正在計划此請求的計划程序的 ID。有關此計划程序的詳細信息,請查詢 sys.dm_os_schedulers 動態管理視圖。不可為空值。

task_address

varbinary(8)

分配給與此請求關聯的任務的內存地址。有關此任務的詳細信息,請查詢 sys.dm_os_tasks 動態管理視圖。可為空值。

reads

bigint

此請求執行的讀取數。不可為空值。

Writes

bigint

此請求執行的寫入數。不可為空值。

logical_reads

bigint

此請求已經執行的邏輯讀取數。不可為空值。

text_size

int

此請求的 TEXTSIZE 設置。不可為空值。

language

nvarchar(256)

該請求的語言設置。可為空值。

date_format

nvarchar(3)

該請求的 DATEFORMAT 設置。可為空值。

date_first

smallint

該請求的 DATEFIRST 設置。不可為空值。

quoted_identifier

bit

1 = QUOTED_IDENTIFIER 對於該請求是 ON。否則為 0。

不可為空值。

arithabort

bit

1 = ARITHABORT 設置對於該請求是 ON。否則為 0。

不可為空值。

ansi_null_dflt_on

bit

1 = ANSI_NULL_DFLT_ON 設置對於該請求是 ON。否則為 0。

不可為空值。

ansi_defaults

bit

1 = ANSI_DEFAULTS 設置對於該請求是 ON。否則為 0。

不可為空值。

ansi_warnings

bit

1 = ANSI_WARNINGS 設置對於該請求是 ON。否則為 0。

不可為空值。

ansi_padding

bit

1 = ANSI_PADDING 設置對於該請求是 ON。

否則為 0。

不可為空值。

ansi_nulls

bit

1 = ANSI_NULLS 設置對於該請求是 ON。否則為 0。

不可為空值。

concat_null_yields_null

bit

1 = CONCAT_NULL_YIELDS_NULL 設置對於該請求是 ON。否則為 0。

不可為空值。

transaction_isolation_level

smallint

此請求的事務隔離級別。可能的值包括:

0 = 未指定

1 = 未提交讀取

2 = 已提交讀取

3 = 可重復

4 = 可序列化

5 = 快照

不可為空值。

lock_timeout

int

此請求的鎖超時時間(毫秒)。不可為空值。

deadlock_priority

int

請求的 DEADLOCK_PRIORITY 設置。不可為空值。

row_count

bigint

已由此請求返回到客戶端的行數。不可為空值。

prev_error

int

在執行請求期間發生的最后一個錯誤。不可為空值。

nest_level

int

正在對該請求執行的代碼的嵌套級別。不可為空值。

granted_query_memory

int

為執行該請求的查詢而分配的頁數。不可為空值。

executing_managed_code

bit

指示此請求是否正在執行公共語言運行時對象,例如例程、類型和觸發器。只要公共語言運行時對象在堆棧中,就會設置此值,甚至在從公共語言運行時運行 Transact-SQL 時,也會設置。不可為空值。

需要對服務器具有 VIEW SERVER STATE 權限。

 
如果用戶擁有對服務器的 VIEW SERVER STATE 權限,用戶將會查看 SQL Server 實例上的所有正在執行的會話;否則,用戶將只會查看執行 sys.dm_exec_requests 的會話。

 

 

對於/應用 關系

sys.dm_exec_sessions

sys.dm_exec_requests

session_id

一對

零或一對多

sys.dm_exec_requests

sys.dm_exec_sql_text(sql_handle)

CROSS APPLY

OUTER APPLY

零或一對

零或一

sys.dm_exec_requests

sys.dm_exec_query_plan(plan_handle)

CROSS APPLY

OUTER APPLY

零或一對

零或一

sys.dm_exec_requests

sys.dm_exec_cached_plans

plan_handle

零或一對

零或一

sys.dm_exec_requests

sys.dm_exec_plan_attributes(plan_handle)

CROSS APPLY

OUTER APPLY

零或一對

零或一

sys.dm_exec_requests

sys.databases

database_id

一對一

sys.dm_exec_requests

sys.database_principals

user_id =principal_id

 

一對一

sys.dm_exec_connections

sys.dm_exec_requests

connection_id

一對

零或一

sys.dm_exec_requests

sys.dm_tran_active_transactions

transaction_id

一對一

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM