sys.dm_tran_active_transactions(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

动态管理视图返回 sys.dm_tran_active_transactions 该实例的事务信息。

列名称 数据类型 描述
transaction_id bigint 实例级而非数据库级的事务 ID。 仅在一个实例的所有数据库中唯一,在所有服务器实例中则不唯一。
name nvarchar(32) 事务名称。 如果事务已被标记且标记的名称替换事务名称,则此名称被覆盖。
transaction_begin_time datetime 事务启动的时间。
transaction_type int 事务的类型。

1 = 读/写事务

2 = 只读事务

3 = 系统事务

4 = 分布式事务
transaction_uow uniqueidentifier 分布式事务的事务工作单元 (UOW) 标识符。 Microsoft分布式事务协调器(MS DTC)使用UOW标识符来处理分布式事务。
transaction_state int 0 = 事务尚未完全初始化。

1 = 事务已初始化但尚未启动。

2 = 事务处于活动状态。

3 = 事务已结束。 用于只读交易。

4 = 已对分布式事务启动提交进程。 仅限分布式交易。 分布式事务仍然处于活动状态,但不会进行进一步处理。

5 = 事务处于准备就绪状态且等待解析。

6 = 事务已提交。

7 = 事务正在被回滚。

8 = 事务已回滚。
transaction_status int 标识为仅供参考。 不支持。 不保证以后的兼容性。
transaction_status2 int 标识为仅供参考。 不支持。 不保证以后的兼容性。
dtc_state int 适用于: Azure SQL 数据库。

1 = 活动

2 = 准备就绪

3 = 已提交

4 = 中止

5 = 已恢复
dtc_status int 标识为仅供参考。 不支持。 不保证以后的兼容性。
dtc_isolation_level int 标识为仅供参考。 不支持。 不保证以后的兼容性。
filestream_transaction_id varbinary(128) 适用于: Azure SQL 数据库。

标识为仅供参考。 不支持。 不保证以后的兼容性。
pdw_node_id int 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)

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

权限

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

在 Microsoft Fabric 中,查询 需要sys.dm_tran_active_transactions处于贡献者工作区角色或更高权限角色的成员身份。

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

SQL Server 2022 及更高版本的权限

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

注解

要在 Azure Synapse Analytics 或 Analytics Platform System(PDW)中调用此动态管理视图,请使用名称 sys.dm_pdw_nodes_tran_active_transactions 此语法在 Azure Synapse Analytics 中不被无服务器 SQL 池支持 。

示例

A. 与其他DMV合作sys.dm_tran_active_transactions查找活跃交易信息

以下示例显示了系统上所有活跃的交易。 查询提供了关于事务、用户会话、提交的应用程序以及发起查询等多种详细信息。

SELECT
  GETDATE() as now,
  DATEDIFF(SECOND, transaction_begin_time, GETDATE()) as tran_elapsed_time_seconds,
  st.session_id,
  txt.text, 
  *
FROM
  sys.dm_tran_active_transactions at
  INNER JOIN sys.dm_tran_session_transactions st ON st.transaction_id = at.transaction_id
  LEFT OUTER JOIN sys.dm_exec_sessions sess ON st.session_id = sess.session_id
  LEFT OUTER JOIN sys.dm_exec_connections conn ON conn.session_id = sess.session_id
    OUTER APPLY sys.dm_exec_sql_text(conn.most_recent_sql_handle)  AS txt
ORDER BY
  tran_elapsed_time_seconds DESC;