sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
在 SQL Server 實例中,此動態管理檢視會針對產生或可能存取數據列版本的所有使用中交易傳回虛擬數據表。 下列一或多個條件包含交易:
當ALLOW_SNAPSHOT_ISOLATION與READ_COMMITTED_SNAPSHOT資料庫選項都設定為 ON 時:
在快照隔離等級下執行的每個交易,或使用數據列版本設定的讀取認可隔離等級,都有一個數據列。
每個交易都有一個數據列,導致在目前資料庫中建立數據列版本。 例如,交易會藉由更新或刪除目前資料庫中的數據列來產生數據列版本。
引發觸發程式時,觸發程序執行所在的交易會有一個數據列。
當在線索引編製程式正在執行時,建立索引的交易會有一個數據列。
啟用多個作用中結果集 (MARS) 工作階段時,每個交易都會有一個數據列可存取數據列版本。
此動態管理檢視不包含系統交易。
注意
若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 呼叫此專案,請使用名稱 sys.dm_pdw_nodes_tran_active_snapshot_database_transactions。 Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。
語法
sys.dm_tran_active_snapshot_database_transactions
傳回的資料表
資料行名稱 | 資料類型 | 描述 |
---|---|---|
transaction_id | bigint | 為交易指派的唯一標識碼。 交易標識碼主要用於識別鎖定作業中的交易。 |
transaction_sequence_num | bigint | 交易序號。 這是在交易啟動時指派給交易的唯一序號。 未產生版本記錄且不使用快照集掃描的交易將不會收到交易序號。 |
commit_sequence_num | bigint | 序號,指出交易何時完成(認可或停止)。 對於使用中交易,值為 NULL。 |
is_snapshot | int | 0 = 不是快照集隔離交易。 1 = 這是快照集隔離交易。 |
session_id | int | 啟動交易之會話的標識碼。 |
first_snapshot_sequence_num | bigint | 擷取快照集時作用中之交易的最低交易序號。 在執行時,快照集交易會擷取當時所有使用中交易的快照集。 對於非napshot 交易,此數據行會顯示0。 |
max_version_chain_traversed | int | 周游以尋找交易一致版本之版本鏈結的最大長度。 |
average_version_chain_traversed | real | 周遊的版本鏈結中平均數據列版本數目。 |
elapsed_time_seconds | bigint | 交易取得其交易序號之後經過的時間。 |
pdw_node_id | int | 適用於:Azure Synapse Analytics、Analytics Platform System (PDW) 此散發節點的標識碼。 |
權限
在 SQL Server 和 SQL 受控執行個體上,需要 VIEW SERVER STATE
權限。
在 SQL Database [Basic]、[S0] 和 [S1] 服務目標,以及彈性集區中的資料庫,需要伺服器管理員帳戶、伺服器管理員帳戶、Microsoft Entra 管理員帳戶或 ##MS_ServerStateReader##
伺服器角色的成員資格。 在所有其他 SQL Database 服務目標上,需要資料庫的 VIEW DATABASE STATE
權限或 ##MS_ServerStateReader##
伺服器角色的成員資格。
SQL Server 2022 及更新版本的權限
需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。
備註
sys.dm_tran_active_snapshot_database_transactions報告已指派交易序號 (XSN) 的交易。 當交易第一次存取版本存放區時,會指派 XSN。 在使用數據列版本設定啟用快照集隔離或讀取認可隔離的資料庫中,範例會顯示 XSN 指派給交易的時間:
如果交易是在可串行化隔離等級下執行,當交易第一次執行語句,例如 UPDATE 作業時,就會指派 XSN,這會導致建立數據列版本。
如果在快照隔離下執行交易,則會在執行任何數據操作語言 (DML) 語句,包括 SELECT 作業時指派 XSN。
交易序號會針對在 資料庫引擎 實例中啟動的每個交易,依序遞增。
範例
下列範例會使用一個測試案例,其中四個並行交易,每個交易都是由交易序號 (XSN) 所識別,且資料庫中有設定為 ON 的ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT選項。 下列交易正在執行:
XSN-57 是可串行化隔離下的更新作業。
XSN-58 與 XSN-57 相同。
XSN-59 是快照隔離下選取作業
XSN-60 與 XSN-59 相同。
執行下列查詢。
SELECT
transaction_id,
transaction_sequence_num,
commit_sequence_num,
is_snapshot session_id,
first_snapshot_sequence_num,
max_version_chain_traversed,
average_version_chain_traversed,
elapsed_time_seconds
FROM sys.dm_tran_active_snapshot_database_transactions;
結果集如下所示。
transaction_id transaction_sequence_num commit_sequence_num
-------------- ------------------------ -------------------
9295 57 NULL
9324 58 NULL
9387 59 NULL
9400 60 NULL
is_snapshot session_id first_snapshot_sequence_num
----------- ----------- ---------------------------
0 54 0
0 53 0
1 52 57
1 51 57
max_version_chain_traversed average_version_chain_traversed
--------------------------- -------------------------------
0 0
0 0
1 1
1 1
elapsed_time_seconds
--------------------
419
397
359
333
下列資訊會評估來自 sys.dm_tran_active_snapshot_database_transactions的結果:
XSN-57:由於此交易未在快照集隔離下執行,因此
is_snapshot
值和first_snapshot_sequence_num
為0
。transaction_sequence_num
顯示已將交易序號指派給此交易,因為一或兩個ALLOW_SNAPSHOT_ISOLATION或READ_COMMITTED_SNAPSHOT資料庫選項皆為 ON。XSN-58:此交易未在快照集隔離下執行,且適用於 XSN-57 的相同資訊。
XSN-59:這是在快照隔離下執行的第一個使用中交易。 此交易會讀取 XSN-57 之前認可的數據,如 所
first_snapshot_sequence_num
指示。 此交易的輸出也會顯示針對數據列周遊的最大版本鏈結,1
並且已1
周遊每個存取數據列的平均版本。 這表示 XSN-57、XSN-58 和 XSN-60 的交易未修改數據列和認可。XSN-60:這是在快照隔離下執行的第二筆交易。 輸出會顯示與 XSN-59 相同的資訊。
另請參閱
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
動態管理檢視和函數 (Transact-SQL)
交易相關的動態管理檢視和函數 (Transact-SQL)