sys.dm_tran_version_store (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure 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 Database [Basic]、[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 已從另一個數據表建立一個數據列版本。