sql-server - 计算 SQL Server 2008 中的回滚次数

标签 sql-server transactions

我正在试验 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/

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

关于sql-server - 计算 SQL Server 2008 中的回滚次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38823712/

相关文章:

sql-server - SQL Server 按架构还原和备份

mysql - 以默认值作为列名的 SQL 更新语句

c# - 在 C# 中存储 SqlServer 的 raiserror 消息

php - 检查 innoDB 行上的事务是否正在发生?

c# - 提供一系列唯一数字的好方法是什么(C# vs Sql)?

sql-server - 包含在函数中的 Select 语句不能将数据返回给 client_New

java - Spring声明式事务管理: multiple pointcuts

java - 如何在多线程之间共享一个事务

android - Actionbar 选项卡的 FragmentTransaction .attach 和 .detach

java - 由于事务传播无法 Autowiring 组件