【问题标题】:A big block or multiple small blocks of BEGIN TRAN and COMMIT TRANBEGIN TRAN 和 COMMIT TRAN 的一个大块或多个小块
【发布时间】:2017-10-24 18:34:52
【问题描述】:

我有一个存储过程,它执行数百个不同的事务任务(DELETE/INSERT/UPDATE)。令人惊讶的是,它们被分组在一个大的 BEGIN TRAN 和 COMMIT TRAN 块中。它曾经运行良好,但最近存储过程运行时间过长,因为数据积累。

我的问题是:如果我将它们分成多个,是否有任何性能提升 较小的 BEGIN TRAN 和 COMMIT TRAN 块。如果没有,解决办法是什么?谢谢!

【问题讨论】:

  • 你用的是什么数据库?
  • SQL 服务器 2012
  • 我做了一个简单的测试,将大块分成四个块。执行时间从 110 秒减少到 80 秒。

标签: sql sql-server performance transactions


【解决方案1】:

当然,当您将单个事务分解为多个部分时,性能会有所提升。因为小事务语句完成后数据会被提交。它将消耗更少的磁盘空间,因为它必须维护更少的事务日志。如果表不相关,则可以随意定义多个事务。在一个事务下执行的语句本身应该在逻辑上是完整的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2016-02-14
    • 2012-12-18
    • 2018-10-31
    • 2010-09-16
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多