sys.dm_exec_requests (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
傳回在 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_handle 來sys.dm_exec_sql_text 擷取要求的文字。 內部系統進程會根據其執行的工作類型來設定命令。 工作可以包含下列值:LOCK MONITOR CHECKPOINTLAZY 作家 不可為 Null。 |
sql_handle |
varbinary(64) | 這是指唯一識別所屬批次或預存程序的 Token。 可為 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。 在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。 |
user_id |
int | 提交要求的使用者標識碼。 不可為 Null。 |
connection_id |
uniqueidentifier | 要求抵達之聯機的標識碼。 可為 Null。 |
blocking_session_id |
smallint | 封鎖要求之工作階段的識別碼。 如果此數據行為 NULL 或 0 ,則不會封鎖要求,或封鎖會話的會話信息無法使用(或無法識別)。 如需詳細資訊,請參閱 瞭解並解決 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 = ReadUncommitted 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 中,只有協調器線程才會顯示要求。 協調器線程的數據行 reads
、 writes
、 logical_reads
和 row_count
不會更新 。 、、 last_wait_type
wait_resource
和 granted_query_memory
資料行wait_type
wait_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
相關內容
- 系統動態管理檢視
- 執行相關的動態管理檢視和函數 (Transact-SQL)
- sys.dm_os_memory_clerks (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_exec_query_memory_grants (Transact-SQL)
- sys.dm_exec_query_plan (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- SQL Server、SQL Statistics 物件
- 查詢處理架構指南
- 執行緒和工作架構指南
- 交易鎖定與資料列版本設定指南
- 了解並解決 SQL Server 封鎖問題