sys.dm_tran_active_transactions (Transact-SQL)

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

返回有关 SQL Server 实例的事务的信息。

注意

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

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

1 = 读/写事务

2 = 只读事务

3 = 系统事务

4 = 分布式事务
transaction_uow uniqueidentifier 分布式事务的事务工作单元 (UOW) 标识符。 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 权限。

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

SQL Server 2022 及更高版本的权限

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

示例

A. 将sys.dm_tran_active_transactions与其他 DMV 配合使用来查找有关活动事务的信息

以下示例演示系统上的任何活动事务,并提供有关事务、用户会话、提交的应用程序以及启动该事务的查询以及许多其他事务的详细信息。

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;

另请参阅

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