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 已從另一個資料表建立一個資料列版本。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應