sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics 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 資料庫基本、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_num0transaction_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)