我正在试验 SET-OPTION XACT_ABORT ON
,因为我看到很多休眠 session 持有一个打开的事务,导致应用程序出现问题。
有没有办法衡量翻转选项是否有效果? 我正在考虑类似每天回滚的次数。我该如何收集这些?
我正在使用 SQL Server 2008 SP4。
最佳答案
考虑到您的数据库处于完整恢复模式。您可以合并每天进行的所有事务日志备份并查询它...
SELECT
CASE
WHEN OPERATION='LOP_ABORT_XACT' THEN 'COMMITS'
ELSE 'ROLLBACKS' END AS 'OPERATIONS'
,COUNT(*) AS CNT
FROM FN_DBLOG(NULL,NULL) WHERE OPERATION IN ('LOP_COMMIT_XACT','LOP_ABORT_XACT')
GROUP BY OPERATION
我用一些样本数据做了一些测试..
Begin tran test1
insert into t1
select 3
rollback
输出:
Operations cnt
Commits 3
RollBacks 4
根据评论更新:
阅读事务日志备份可能很昂贵,我建议您在备份而不是事件日志上执行此操作..在事件 Tlog 上执行此操作可能会产生以下效果
1.因为这是一个日志扫描,Transaction log truncation will be prevented
2.服务器上的巨大 IO 负载取决于您的日志备份大小,since the output of ::fn_dblog can easily go into millions of rows
引用资料:
http://rusanu.com/2014/03/10/how-to-read-and-interpret-the-sql-server-log/
关于sql-server - 计算 SQL Server 2008 中的回滚次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38823712/