sys.dm_exec_requests (Transact-SQL)
適用于:SQL Server
Azure SQL資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics Analytics
Platform System (PDW)
傳回在 SQL Server 中執行之每項要求的相關資訊。 如需要求的詳細資訊,請參閱 執行緒和工作架構指南。
注意
若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 中的專用 SQL 集區呼叫此功能,請參閱sys.dm_pdw_exec_requests (Transact-SQL) 。 針對無伺服器 SQL 集區,請使用 sys.dm_exec_requests
。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
session_id | smallint | 這個要求相關的工作階段識別碼。 不可為 Null。 |
request_id | int | 要求的識別碼。 在工作階段的內容中是唯一的。 不可為 Null。 |
start_time | datetime | 要求到達時的時間戳記。 不可為 Null。 |
status | nvarchar(30) | 要求的狀態。 可以是下列值之一: 背景 執行中 可執行的 休眠中 暫止 不可為 Null。 |
命令 | nvarchar(32) | 識別目前所處理命令的類型。 常見的命令類型包括下列值: SELECT INSERT UPDATE DELETE BACKUP LOG BACKUP DATABASE DBCC FOR 要求的文字可使用 sys.dm_exec_sql_text 加上要求的對應 sql_handle 來擷取。 內部系統處理序會根據其所執行工作的類型來設定命令。 工作可以包含下列值: LOCK MONITOR CHECKPOINTLAZY WRITER 不可為 Null。 |
sql_handle | varbinary(64) | 這是可唯一識別查詢所屬批次或預存程式的權杖。 可為 Null。 |
statement_start_offset | int | 指出,以位元組為單位,從 0 開始,目前執行中批次或保存物件的目前執行語句開始位置。 可與 、 statement_end_offset 和 sys.dm_exec_sql_text 動態管理功能搭配 sql_handle 使用,以擷取要求的目前執行語句。 可為 Null。 |
statement_end_offset | int | 指出,以位元組為單位,從 0 開始,目前執行中批次或保存物件的目前執行語句結束位置。 可與 、 statement_start_offset 和 sys.dm_exec_sql_text 動態管理功能搭配 sql_handle 使用,以擷取要求的目前執行語句。 可為 Null。 |
plan_handle | varbinary(64) | 這是一個權杖,可唯一識別目前正在執行的批次查詢執行計畫。 可為 Null。 |
database_id | smallint | 要求執行目標的資料庫識別碼。 不可為 Null。 |
user_id | int | 提交要求之使用者的識別碼。 不可為 Null。 |
connection_id | uniqueidentifier | 要求到達所用連接的識別碼。 可為 Null。 |
blocking_session_id | smallint | 封鎖要求之工作階段的識別碼。 如果此資料行為 Null 或等於 0,則不會封鎖要求,或封鎖會話的會話資訊無法 (或無法識別) 。 如需詳細資訊,請參閱瞭解並解決SQL Server封鎖問題。 -2 = 封鎖資源是由被遺棄的分散式交易所擁有。 -3 = 封鎖資源是由延遲的復原交易所擁有。 -4 = 封鎖閂鎖擁有者的會話識別碼目前無法判斷,因為內部閂鎖狀態轉換。 -5 = 無法判斷封鎖閂鎖擁有者的會話識別碼,因為無法追蹤此閂鎖類型 (例如 SH 閂鎖) 。 本身,blocking_session_id -5 不會指出效能問題。 -5 表示會話正在等候非同步動作完成。 在引進 -5 之前,相同的會話會顯示blocking_session_id 0,即使它仍處於等候狀態也一樣。 視工作負載而定,觀察到 -5,因為blocking_session_id可能是常見的情況。 |
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 含有 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。 |
語言 | 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 = Unspecified 1 = ReadUncomitted 2 = ReadCommitted 3 = Repeatable 4 = Serializable 5 = Snapshot |
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 控制碼。 如果資料庫未啟用查詢存放區,則此資料行為 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。 |
備註
若要執行SQL Server (外部的程式碼,例如,擴充預存程式和分散式查詢) ,執行緒必須在非先占式排程器的控制之外執行。 若要這麼做,工作者必須切換到先佔式模式。 此動態管理檢視所傳回的時間值不包含在先占模式中花費的時間。
以資料列模式執行平行要求時,SQL Server指派背景工作執行緒來協調負責完成指派給他們的工作的背景工作執行緒。 在此 DMV 中,只有協調器執行緒會顯示要求。 協調器執行緒不會更新資料行 reads
、 writes
、 logical_reads
和 row_count
。 協調器執行緒只會更新資料行 wait_type
、 wait_time
last_wait_type
、、 wait_resource
和 granted_query_memory
。 如需詳細資訊,請參閱執行緒與工作架構指南。
權限
如果使用者具有 VIEW SERVER STATE
伺服器的許可權,使用者就會在SQL Server實例上看到所有執行中的會話;否則,使用者只會看到目前的會話。 VIEW SERVER STATE
無法在 Azure SQL Database 中授與,因此 sys.dm_exec_requests
一律僅限於目前的連線。
在Always-On案例中,如果次要複本設定為 唯讀意圖,則與次要複本的連接必須在連接字串參數中藉由新增 applicationintent=readonly
來指定其應用程式意圖。 否則,即使 VIEW SERVER STATE
有許可權,存取檢查 sys.dm_exec_requests
也不會針對可用性群組中的資料庫傳遞。
SQL Server 2022 和更新版本的許可權
需要伺服器上的 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
然後,若要尋找鎖定資訊,請使用與系統函 sys.dm_tran_locks
式 一 transaction_id
起複製的 。
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
, 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
另請參閱
- 動態管理檢視和函數
- 執行相關的動態管理檢視和函數
- 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 的 SQL Statistics 物件
- 查詢處理架構指南
- 執行緒和工作架構指南