【问题标题】:TRANSACTION ISOLATION LEVEL REPEATABLE READ in SQL ServerSQL Server 中的事务隔离级别可重复读取
【发布时间】:2010-01-28 14:21:10
【问题描述】:

使用 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ 时有哪些风险或性能下降?

我们有一些从 BizTalk 服务调用的 SP。我们有时会陷入僵局。如果我们改变隔离级别,有什么风险和可能的性能下降?

【问题讨论】:

  • “死锁”是什么意思?是SQL Server 返回一条错误消息,说明死锁已解决,还是您的事务只是挂起?后者不是死锁,而是锁争用。

标签: sql-server biztalk isolation-level


【解决方案1】:

可重复读取将锁定所有具有 被取走。在您正在使用的情况下 游标获取大量数据,这可能导致 与其他用户争用,因为他们不能 获取锁以更新游标读取的任何行 可重复读取,直到光标关闭。

性能下降的风险是事务可能 遭受更多的超时和/或死锁。这种风险 与两笔交易需要进行的概率成正比 同时读取/更新相同的行。另一个因素 可能影响您的应用程序的是所采用的锁的大小。如果锁是 如果数据不同,则可能会发生争用 需要访问的事务位于同一页面上 - 不一定是同一行。

另一方面,当您使用较低的隔离级别时, 例如,光标稳定性,您保留开放的可能性 您之前在交易期间获取的行可能是 在您的工作单元更新之前由其他事务更新 完成。

【讨论】:

    【解决方案2】:

    试试看。我们无法告诉您使用单个数据点(事务隔离级别)可能会遇到哪些潜在风险或性能问题。我们对您的数据、数据量、TPS、数据依赖性一无所知。每当性能成为问题时,尝试它,衡量它。没有其他答案。

    【讨论】:

      【解决方案3】:

      补充已经说过的内容:您不能完全消除死锁。您所能做的就是将它们发生的可能性降到最低。

      【讨论】:

        【解决方案4】:

        可重复读取不会在读取完成后解除共享锁。

        这意味着如果您在RR 事务中执行SELECT,并发事务将无法更新您的SELECT 锁定的行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-10
          • 2011-06-05
          • 1970-01-01
          • 1970-01-01
          • 2018-02-02
          • 2017-04-14
          • 1970-01-01
          相关资源
          最近更新 更多