sys.dm_tran_transactions_snapshot (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

返回每个快照事务启动时处于活动状态的事务sequence_number的虚拟表。 此视图返回的信息有助于您:

  • 确定当前的活动快照事务数。

  • 确定特定快照事务忽略的数据修改。 对于在快照事务启动时活动的事务,快照事务将忽略由其进行的所有数据修改,即使在事务提交后也是如此。

例如,请考虑sys.dm_tran_transactions_snapshot的以下输出

transaction_sequence_num snapshot_id snapshot_sequence_num  
------------------------ ----------- ---------------------  
59                       0           57  
59                       0           58  
60                       0           57  
60                       0           58  
60                       0           59  
60                       3           57  
60                       3           58  
60                       3           59  
60                       3           60  

transaction_sequence_num 列标识当前快照事务的事务序列 (XSN) 号。 该输出显示两个序列号:5960snapshot_sequence_num 列标识在每个快照事务启动时处于活动状态的事务的事务序列号。

该输出显示,在两个活动事务 XSN-57 和 XSN-58 运行时,快照事务 XSN-59 启动。 如果 XSN-57 或 XSN-58 进行了数据修改,XSN-59 将忽略这些修改,并使用行版本控制来维护数据库的事务一致视图。

快照事务 XSN-60 将忽略由 XSN-57 和 XSN-58 以及 XSN 59 进行的数据修改。

返回的表

列名称 数据类型 描述
transaction_sequence_num bigint 快照事务的事务序列号 (XSN)。
snapshot_id int 每个 Transact-SQL 语句的快照 ID 均使用行版本控制在读取提交下启动。 该值用于为数据库生成事务一致视图,该数据库支持在使用行版本控制已提交读的情况下运行的每个查询。
snapshot_sequence_num bigint 启动快照事务时处于活动状态的事务的事务序列号。

权限

对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE 权限。

在 SQL 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Microsoft Entra 管理员帐户或 ##MS_ServerStateReader## 服务器角色中的成员身份为必填项。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE 权限或 ##MS_ServerStateReader## 服务器角色中的成员身份。

SQL Server 2022 及更高版本的权限

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

注解

快照事务启动时,数据库引擎记录当时处于活动状态的所有事务。 sys.dm_tran_transactions_snapshot报告所有当前活动快照事务的此信息。

每个事务都由事务开始时分配的事务序列号标识。 在执行 BEGIN TRANSACTION 或 BEGIN WORK 语句时事务启动。 但是,数据库引擎分配事务序列号,并执行第一个 Transact-SQL 语句,该语句访问 BEGIN TRANSACTION 或 BEGIN WORK 语句之后的数据。 事务序列号以一为增量递增。

另请参阅

动态管理视图和函数 (Transact-SQL)
与事务有关的动态管理视图和函数 (Transact-SQL)