TRANSACTION ISOLATION LEVEL REPEATABLE在SQL Server中读取

时间:2010-01-28 14:21:11

标签: sql-server biztalk isolation-level

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

我们有一些从BizTalk服务调用的SP。我们有时会遇到僵局。如果我们改变隔离级别,有哪些风险和可能的性能退化?

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

试试吧。我们无法告诉您使用单个数据点可能遇到的潜在风险或性能问题(TRANSACTION ISOLATION LEVEL)。我们对您的数据,数据量,TPS,数据依赖性一无所知。只要表现是一个问题,试试吧,衡量它。没有其他答案。

答案 2 :(得分:2)

添加到已经说过的内容:你无法完全消除死锁。你所能做的就是尽量减少它们发生的可能性。

答案 3 :(得分:1)

重复读取在读取完成后不会提升共享锁。

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