sys.dm_tran_current_transaction (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

返回一行,该行显示当前会话中的事务状态信息。

注意

若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此名称,请使用名称 sys.dm_pdw_nodes_tran_current_transaction。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

语法

  
sys.dm_tran_current_transaction  

返回的表

列名称 数据类型 描述
transaction_id bigint 当前快照的事务 ID。
transaction_sequence_num bigint 生成该记录版本的事务的序列号。
transaction_is_snapshot bit 快照隔离状态。 如果事务在快照隔离状态下启动,则此值为 1。 否则,此值为 0。
first_snapshot_sequence_num bigint 拍摄快照时处于活动状态的事务的最小事务序列号。 当执行快照事务时,它会拍摄当时所有活动事务的快照。 对于非快照事务,此列显示 0。
last_transaction_sequence_num bigint 全局序列号。 此值表示由系统生成的最后一个事务序列号。
first_useful_sequence_num bigint 全局序列号。 此值表示具有行版本(必须在版本存储区中保留)的事务的最早事务序列号。 由以前的事务创建的行版本可以删除。
pdw_node_id int 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)

此分发所在节点的标识符。

权限

对于 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 权限。

示例

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

  • XSN-57 是序列化隔离下的更新操作。

  • XSN-58 与 XSN-57 相同。

  • XSN-59 是快照隔离下的选择操作。

  • XSN-60 与 XSN-59 相同。

下面的查询在每个事务的作用域中执行。

SELECT   
    transaction_id  
   ,transaction_sequence_num  
   ,transaction_is_snapshot  
   ,first_snapshot_sequence_num  
   ,last_transaction_sequence_num  
   ,first_useful_sequence_num  
  FROM sys.dm_tran_current_transaction;  

下面是 XSN-59 的结果。

transaction_id       transaction_sequence_num transaction_is_snapshot  
-------------------- ------------------------ -----------------------  
9387                 59                       1                         
  
first_snapshot_sequence_num last_transaction_sequence_num  
--------------------------- -----------------------------  
57                               61                        
  
first_useful_sequence_num  
-------------------------  
57  

输出显示 XSN-59 是快照事务,该事务将 XSN-57 用作在 XSN-59 启动时已处于活动状态的第一个事务。 这表示 XSN-59 可读取由事务序列号低于 XSN-57 的事务提交的数据。

下面是 XSN-57 的结果。

transaction_id       transaction_sequence_num transaction_is_snapshot  
-------------------- ------------------------ -----------------------  
9295                 57                       0  
  
first_snapshot_sequence_num last_transaction_sequence_num  
--------------------------- -----------------------------  
NULL                        61  
  
first_useful_sequence_num  
-------------------------  
57  

由于 XSN-57 不是快照事务,因此 first_snapshot_sequence_numNULL

另请参阅

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