適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉庫
Microsoft Fabric 中的 SQL 資料庫
傳回在 SQL Server 中執行之每項要求的相關資訊。 如需要求的詳細資訊,請參閱 線程和工作架構指南。
| 欄位名稱 | 資料類型 | 說明 |
|---|---|---|
session_id |
smallint | 此要求相關之會話的標識碼。 不可為空。 |
request_id |
int | 要求的識別碼。 會話內容中是唯一的。 不可為空。 |
start_time |
datetime | 要求送達時的時間戳。 不可為空。 |
status |
nvarchar(30) | 要求的狀態。 可以是下列值之一: 背景 回復 執行中 可運行的 睡覺 暫停 不可為空。 |
command |
nvarchar(32) | 識別目前正在處理的命令類型。 常見的指令類型包括下列值: SELECT INSERT UPDATE DELETE BACKUP 日誌 BACKUP DATABASE DBCC 為了 您可以搭配要求的 對應 sys.dm_exec_sql_text來sql_handle擷取要求的文字。 內部系統進程會根據其執行的工作類型來設定命令。 工作可以包含下列值:鎖定監視器 CHECKPOINTLAZY 作家 不可為空。 |
sql_handle |
varbinary(64) | 可唯一識別查詢所屬批次或預存程式的令牌。 可為空值。 |
statement_start_offset |
int | 指出,以位元組為單位,從0開始,目前執行中批次或保存物件的目前執行語句的起始位置。 可與 、 sql_handle和 statement_end_offset 動態管理函式搭配sys.dm_exec_sql_text使用,以擷取要求目前執行中的語句。 可為空值。 |
statement_end_offset |
int | 指出,以位元組為單位,從 0 開始,目前執行中批次或保存物件的目前執行語句結束位置。 可與 、 sql_handle和 statement_start_offset 動態管理函式搭配sys.dm_exec_sql_text使用,以擷取要求目前執行中的語句。 可為空值。 |
plan_handle |
varbinary(64) | 令牌,可唯一識別目前正在執行的批次查詢執行計劃。 可為空值。 |
database_id |
smallint | 要求執行所針對之資料庫的標識碼。 不可為空。 在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。 |
user_id |
int | 提交要求的使用者標識碼。 不可為空。 |
connection_id |
uniqueidentifier | 要求抵達之聯機的標識碼。 可為空值。 |
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_id0,即使它仍處於等候狀態。視工作負載而定,觀察 blocking_session_id = -5 可能是常見的情況。 |
wait_type |
nvarchar(60) | 若要求目前被封鎖,這個資料行會傳回等候的類型。 可為空值。 當請求使用多個任務時 (例如,由於查詢內平行處理原則),任務可以等待具有不同等待類型的不同資源。 可以封鎖工作,而相同要求的其他工作會繼續執行。 若要尋找每個工作的等待類型和持續時間,以及是否被封鎖,請使用 sys.dm_os_waiting_tasks。 如需等候類型的相關信息,請參閱 sys.dm_os_wait_stats。 |
wait_time |
int | 若要求目前被封鎖,這個資料行會傳回目前等候的持續時間 (以毫秒為單位)。 不可為空。 |
last_wait_type |
nvarchar(60) | 如果這個要求先前被封鎖,這個資料行會傳回上次等候的類型。 不可為空。 |
wait_resource |
nvarchar(256) | 如果目前封鎖要求,這個數據行會傳回要求目前正在等候的資源。 不可為空。 |
open_transaction_count |
int | 針對此要求開啟的交易數目。 不可為空。 |
open_resultset_count |
int | 為此要求開啟的結果集數目。 不可為空。 |
transaction_id |
bigint | 執行此要求之交易的標識碼。 不可為空。 |
context_info |
varbinary(128) | CONTEXT_INFO 這場會談的價值。 可為空值。 |
percent_complete |
real | 下列命令已完成的工作百分比:ALTER INDEX REORGANIZEAUTO_SHRINK 選項搭配 ALTER DATABASEBACKUP DATABASEDBCC CHECKDBDBCC CHECKFILEGROUPDBCC CHECKTABLEDBCC INDEXDEFRAGDBCC SHRINKDATABASEDBCC SHRINKFILERECOVERYRESTORE DATABASEROLLBACKTDE ENCRYPTION不可為空。 |
estimated_completion_time |
bigint | 只限內部。 不可為空。 |
cpu_time |
int | 要求所用的 CPU 時間 (以毫秒為單位)。 不可為空。 |
total_elapsed_time |
int | 要求到達後所經過的總時間 (以毫秒為單位)。 不可為空。 |
scheduler_id |
int | 排程此要求的排程器標識碼。 可為空值。 |
task_address |
varbinary(8) | 配置給與這個要求相關聯之工作的記憶體位址。 可為空值。 |
reads |
bigint | 這項要求所執行的讀取數。 不可為空。 |
writes |
bigint | 這項要求所執行的寫入數。 不可為空。 |
logical_reads |
bigint | 這項要求所執行的邏輯讀取數。 不可為空。 |
text_size |
int | TEXTSIZE 此請求的設定。 不可為空。 |
language |
nvarchar(128) | 要求的語言設定。 可為空值。 |
date_format |
nvarchar(3) | DATEFORMAT 為請求設置。 可為空值。 |
date_first |
smallint | DATEFIRST 為請求設置。 不可為空。 |
quoted_identifier |
位元 | 1 = QUOTED_IDENTIFIER 請求時開啟。 否則為 0。 不可為空。 |
arithabort |
位元 | 1 = ARITHABORT 請求的設定為 ON。 否則為 0。 不可為空。 |
ansi_null_dflt_on |
位元 | 1 = ANSI_NULL_DFLT_ON 請求的設定為 ON。 否則為 0。 不可為空。 |
ansi_defaults |
位元 | 1 = ANSI_DEFAULTS 請求的設定為 ON。 否則為 0。 不可為空。 |
ansi_warnings |
位元 | 1 = ANSI_WARNINGS 請求的設定為 ON。 否則為 0。 不可為空。 |
ansi_padding |
位元 | 1 = ANSI_PADDING 請求的設定為 ON。 否則為 0。 不可為空。 |
ansi_nulls |
位元 | 1 = ANSI_NULLS 請求的設定為 ON。 否則為 0。 不可為空。 |
concat_null_yields_null |
位元 | 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 |
位元 | 指出特定要求目前是否正在執行 Common Language Runtime 物件,例如例程、類型和觸發程式。 它已針對完整時間設定 Common Language Runtime 對象在堆疊上,即使從 Common Language Runtime 內執行 Transact-SQL 也一般。 不可為空。 |
group_id |
int | 此查詢所屬之工作負載群組的標識碼。 不可為空。 |
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 |
位元 |
適用於: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 資料庫 超大規模資料庫 此要求所執行的頁面伺服器讀取數目。 不可為空。 |
dist_statement_id |
uniqueidentifier |
適用於:SQL Server 2022 及以後版本、Azure SQL Database、Fabric 中的 SQL 資料庫、Azure SQL 受控執行個體、Azure Synapse Analytics(僅限無伺服器池)以及 Microsoft Fabric Data Warehouse 所提交要求之語句的唯一標識符。 不可為空。 |
version_reads |
bigint |
適用於:Azure SQL 資料庫及 Microsoft Fabric 中的 SQL 資料庫 此請求迄今從所有版本儲存讀取的列版本數,包括在請求中查詢編譯時執行的版本讀取。 欲了解更多資訊,請參閱 版本已讀指標。 不可為空。 |
備註
若要執行 SQL Server 外部的程式代碼(例如擴充預存程式和分散式查詢),線程必須執行在非先佔排程器的控制之外執行。 若要這樣做,背景工作角色會切換到先占模式。 此動態管理檢視所傳回的時間值不包括在先佔模式中花費的時間。
在數據列模式中執行平行要求時,SQL Server 會指派背景工作線程,以協調負責完成指派給他們的工作的背景工作線程。 在此 DMV 中,只有協調器線程才會顯示要求。 協調器線程的數據行 reads、 writes、 logical_reads和 row_count不會更新 。 、、 wait_typewait_time和 last_wait_type資料行wait_resourcegranted_query_memory只會更新協調器線程。 如需詳細資訊,請參閱 線程和工作架構指南。
數據wait_resource行包含與 resource_description 類似的資訊,但格式不同。
若要從 Azure Synapse Analytics 的專用 SQL 池呼叫,請參見 sys.dm_pdw_exec_requests。 針對無伺服器 SQL 集區或 Microsoft Fabric, 請使用 sys.dm_exec_requests。
許可
如果使用者具有 VIEW SERVER STATE 伺服器的許可權,使用者就會在 SQL Server 實例上看到所有執行中的會話,否則使用者只會看到目前的會話。
VIEW SERVER STATE無法在 Azure SQL 資料庫 中授與,因此sys.dm_exec_requests一律受限於目前的連線。
在可用性群組案例中,如果次要複本設定為唯讀意圖,則與次要複本的連線必須藉由新增 applicationintent=readonly,在 連接字串 參數中指定其應用程式意圖。 否則,即使存在許可權,sys.dm_exec_requests存取檢查VIEW SERVER STATE也不會傳遞可用性群組中的資料庫。
對於 SQL Server 2022(16.x)及更新版本,sys.dm_exec_requests需要VIEW SERVER PERFORMANCE STATE伺服器權限。
Examples
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. 顯示作用中要求
下列範例顯示 SQL Server 數據倉儲中目前正在執行的所有查詢,但不包括您自己的會話 (@@SPID)。 它會使用 CROSS APPLY 搭配 sys.dm_exec_sql_text 來擷取每個要求的完整查詢文字,並與 sys.dm_exec_sessions 聯結以包含使用者任何主機資訊。 篩選 session_id <> @@SPID 可確保您在結果中看不到自己的查詢。
SELECT r.session_id,
r.status,
r.command,
r.start_time,
r.total_elapsed_time / 1000.00 AS elapsed_seconds,
r.cpu_time / 1000.00 AS cpu_seconds,
r.reads,
r.writes,
r.logical_reads,
r.row_count,
s.login_name,
s.host_name,
t.text AS query_text
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_exec_sessions AS s
ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id <> @@SPID
ORDER BY r.start_time DESC;
C. 尋找執行中批次保留的所有鎖定
下列範例會查詢 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
D. 尋找所有目前封鎖的要求
下列範例會查詢 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
E. 依 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 封鎖問題