適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
sys.dm_tran_active_transactions動態管理檢視會回傳該實例的交易資訊。
| 資料行名稱 | 資料類型 | 描述 |
|---|---|---|
transaction_id |
bigint | 實例層級交易的標識碼,而不是資料庫層級。 它只能在實例內的所有資料庫上是唯一的,但並非所有伺服器實例都是唯一的。 |
name |
nvarchar(32) | 交易名稱。 如果交易標示,且標示的名稱會取代交易名稱,則會覆寫此專案。 |
transaction_begin_time |
datetime | 交易啟動的時間。 |
transaction_type |
int | 交易的類型。 1 = 讀取/寫入交易 2 = 唯讀交易 3 = 系統交易 4 = 分散式交易 |
transaction_uow |
uniqueidentifier | 分散式交易的交易單位 (UOW) 識別碼。 Microsoft 分散式交易協調器(MS DTC)使用 UOW 識別碼來處理分散式交易。 |
transaction_state |
int | 0 = 尚未完全初始化交易。 1 = 交易已初始化但尚未啟動。 2 = 交易為使用中。 3 = 交易已結束。 用於唯讀交易。 4 = 認可程式已在分散式交易上起始。 僅限於分散式交易。 分散式交易仍在使用中,但無法進行進一步的處理。 5 = 交易處於備妥狀態,且正在等候解決。 6 = 已認可交易。 7 = 正在回復交易。 8 = 交易已回復。 |
transaction_status |
int | 僅供參考之用。 不支援。 我們無法保證未來的相容性。 |
transaction_status2 |
int | 僅供參考之用。 不支援。 我們無法保證未來的相容性。 |
dtc_state |
int |
適用於:Azure SQL Database。 1 = 主動 2 = 已準備 3 = 已承諾 4 = 取消 5 = 已恢復 |
dtc_status |
int | 僅供參考之用。 不支援。 我們無法保證未來的相容性。 |
dtc_isolation_level |
int | 僅供參考之用。 不支援。 我們無法保證未來的相容性。 |
filestream_transaction_id |
varbinary(128) |
適用於:Azure SQL Database。 僅供參考之用。 不支援。 我們無法保證未來的相容性。 |
pdw_node_id |
int |
適用於:Azure Synapse Analytics、Analytics Platform System (PDW) 此散發節點的標識碼。 |
權限
在 SQL Server 和 SQL 受控執行個體上,需要 VIEW SERVER STATE 權限。
在 Microsoft Fabric 中,查詢 需要成員身份為貢獻者工作區角色或更高特權角色。sys.dm_tran_active_transactions
在 SQL Database [Basic]、[S0] 和 [S1] 服務目標,以及彈性集區中的資料庫,需要伺服器管理員帳戶、伺服器管理員帳戶、Microsoft Entra 管理員帳戶或 ##MS_ServerStateReader##伺服器角色的成員資格。 在所有其他 SQL Database 服務目標上,需要資料庫的 VIEW DATABASE STATE 權限或 ##MS_ServerStateReader## 伺服器角色的成員資格。
SQL Server 2022 及更新版本的權限
需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。
備註
若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 呼叫此動態管理視圖,請使用名稱 sys.dm_pdw_nodes_tran_active_transactions 此語法在 Azure Synapse Analytics 中不支援無伺服器 SQL 池。
範例
A. 與其他車輛管理局(DMV)sys.dm_tran_active_transactions,可以查詢正在進行的交易資訊
以下範例顯示系統中所有活躍的交易。 查詢提供交易、使用者會話、提交的應用程式、啟動查詢等詳細資訊。
SELECT
GETDATE() as now,
DATEDIFF(SECOND, transaction_begin_time, GETDATE()) as tran_elapsed_time_seconds,
st.session_id,
txt.text,
*
FROM
sys.dm_tran_active_transactions at
INNER JOIN sys.dm_tran_session_transactions st ON st.transaction_id = at.transaction_id
LEFT OUTER JOIN sys.dm_exec_sessions sess ON st.session_id = sess.session_id
LEFT OUTER JOIN sys.dm_exec_connections conn ON conn.session_id = sess.session_id
OUTER APPLY sys.dm_exec_sql_text(conn.most_recent_sql_handle) AS txt
ORDER BY
tran_elapsed_time_seconds DESC;