适用于:SQL Server
Azure 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;