DBAtlas · 数据库运维图谱

查找最老的打开事务(ACTIVE_TRANSACTION)

SQL Server备份与日志

命令

USE [Customer];
DBCC OPENTRAN;

-- Detailed: show long-running open transactions and their owners:
SELECT s.session_id, s.login_name, s.host_name, s.program_name,
       t.transaction_id,
       DATEDIFF(SECOND, t.transaction_begin_time, GETDATE()) AS duration_sec,
       t.transaction_begin_time
FROM   sys.dm_tran_active_transactions t
  JOIN sys.dm_tran_session_transactions st ON st.transaction_id = t.transaction_id
  JOIN sys.dm_exec_sessions s ON s.session_id = st.session_id
ORDER BY t.transaction_begin_time;

作用

显示最老的打开(未提交/未回滚)事务及持有它的会话。打开的事务会阻止日志截断(LOG_REUSE_WAIT = ACTIVE_TRANSACTION)。

适用场景

执行了日志备份但日志仍不缩小且 log_reuse_wait_desc = ACTIVE_TRANSACTION 时查找根本原因。

注意

KILL 持有长时间打开事务的会话前,请与业务负责人确认;回滚可能耗时很长。仅查询;无风险。

在 DBAtlas 中打开 →

相关内容