计算SQL Sever 2008中的回滚次数

时间:2016-08-08 07:42:07

标签: sql-server transactions

我正在试验SET-OPTION XACT_ABORT ON因为我看到许多休眠会话持有一个打开的事务导致应用程序出现问题。

有没有办法衡量翻转选项是否有效? 我正在考虑每天回滚次数。我怎么能收集这些?

我在 SQL Server 2008 SP4

1 个答案:

答案 0 :(得分:2)

考虑到您的数据库处于完全恢复模式。您可以组合每天采取的所有事务日志备份并查询它...

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.根据您的日志备份大小since the output of ::fn_dblog can easily go into millions of rows

,在服务器上保存IO负载

参考文献:

http://rusanu.com/2014/03/10/how-to-read-and-interpret-the-sql-server-log/

https://blogs.msdn.microsoft.com/dfurman/2009/11/05/reading-database-transaction-log-with-fn_dump_dblog/