sys.dm_tran_version_store

更新日期: 2005 年 12 月 5 日

返回一个可显示版本存储区中所有版本记录的虚拟表。由于 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

有版本控制的记录的数据库 ID。

rowset_id

bigint

记录的行集 ID。

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)

版本记录的第二部分的二进制图像。

权限

需要对服务器具有 VIEW SERVER STATE 权限。

若要查看 record_image_first_partrecord_image_second_part 列,需要 CONTROL SERVER 权限。否则,这两列将返回 NULL。

示例

下面的示例使用具有四个并发事务的测试方案,每一个事务都由事务序列号 (XSN) 标识,并在 ALLOW_SNAPSHOT_ISOLATION 和 READ_COMMITTED_SNAPSHOT 选项设置为 ON 的数据库中运行。下列事务正在运行:

  • 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 从另一个表创建了一个行版本。

请参阅

参考

动态管理视图和函数
与事务有关的动态管理视图和函数

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本

历史记录

2005 年 12 月 5 日

主题

定义

**新增内容:**添加了一个示例。