sys.dm_tran_version_store (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

傳回虛擬資料表,顯示版本存放區中的所有版本記錄。 sys.dm_tran_version_store 執行效率不佳,因為它會查詢整個版本存放區,而且版本存放區可能非常大。

每個版本設定的記錄都會儲存為二進位資料,以及一些追蹤或狀態資訊。 類似于資料庫資料表中的記錄,版本存放區記錄會儲存在 8192 位元組頁面中。 如果記錄超過 8192 個位元組,記錄將會分割成兩個不同的記錄。

由於版本設定的記錄會儲存為二進位檔,因此不同資料庫的定序並無問題。 使用 sys.dm_tran_version_store ,在版本存放區中存在二進位標記法中尋找舊版的資料列。

語法

sys.dm_tran_version_store  

傳回的資料表

資料行名稱 資料類型 描述
transaction_sequence_num bigint 產生記錄版本的交易序號。
version_sequence_num bigint 版本記錄序號。 此值在產生版本的交易內是唯一的。
database_id int 已建立版本記錄的資料庫識別碼。

在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。
rowset_id bigint 記錄的資料列集識別碼。
status tinyint 指出版本設定的記錄是否已分割成兩筆記錄。 如果值為 0,則記錄會儲存在一個頁面中。 如果值為 1,則記錄會分割成儲存在兩個不同頁面上的兩筆記錄。
min_length_in_bytes smallint 以位元組為單位的記錄長度下限。
record_length_first_part_in_bytes smallint 版本化記錄的第一個部分的長度,以位元組為單位。
record_image_first_part varbinary(8000) 版本記錄第一個部分的二進位影像。
record_length_second_part_in_bytes smallint 版本記錄第二個部分的長度,以位元組為單位。
record_image_second_part varbinary(8000) 版本記錄第二部分的二進位影像。

權限

在 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 權限。

範例

下列範例會使用一個測試案例,其中四個並行交易,每個交易都是由交易序號 (XSN) 所識別,且資料庫中有設定為 ON 的ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT選項。 下列交易正在執行:

  • XSN-57 是可序列化隔離下的更新作業。

  • XSN-58 與 XSN-57 相同。

  • XSN-59 是快照隔離下的選取作業。

  • XSN-60 與 XSN-59 相同。

執行下列查詢。

SELECT  
    transaction_sequence_num,  
    version_sequence_num,  
    database_id rowset_id,  
    status,  
    min_length_in_bytes,  
    record_length_first_part_in_bytes,  
    record_image_first_part,  
    record_length_second_part_in_bytes,  
    record_image_second_part  
  FROM sys.dm_tran_version_store;  

以下為結果集。

transaction_sequence_num version_sequence_num database_id  
------------------------ -------------------- -----------  
57                      1                    9             
57                      2                    9             
57                      3                    9             
58                      1                    9             
  
rowset_id            status min_length_in_bytes  
-------------------- ------ -------------------  
72057594038321152    0      12                   
72057594038321152    0      12                   
72057594038321152    0      12                   
72057594038386688    0      16                   
  
record_length_first_part_in_bytes  
---------------------------------  
29                                 
29                                 
29                                 
33                                 
  
record_image_first_part                                               
--------------------------------------------------------------------  
0x50000C0073000000010000000200FCB000000001000000270000000000          
0x50000C0073000000020000000200FCB000000001000100270000000000          
0x50000C0073000000030000000200FCB000000001000200270000000000          
0x500010000100000002000000030000000300F800000000000000002E0000000000  
  
record_length_second_part_in_bytes record_image_second_part  
---------------------------------- ------------------------  
0                                  NULL  
0                                  NULL  
0                                  NULL  
0                                  NULL  

輸出顯示 XSN-57 已從一個資料表建立三個數據列版本,而 XSN-58 已從另一個資料表建立一個資料列版本。

另請參閱

動態管理檢視和函數 (Transact-SQL)
交易相關的動態管理檢視和函數 (Transact-SQL)