2010-01-28 65 views
4

使用SET TRANSACTION ISOLATION LEVEL REPEATABLE READ时,风险或性能下降情况如何?SQL Server中的事务隔离级别可重复读取

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

+0

“死锁”是什么意思?问题是,SQL Server会返回一个错误消息,说明死锁已经解决,或者您的事务刚刚挂起?后者不是一个僵局,而是一场争夺战。 – Quassnoi 2010-01-28 14:33:02

回答

5

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

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

在另一方面,当你使用较低的隔离级别,例如 游标稳定性,你离开打开行,你有你的交易过程中先前所获取的可 通过其他交易你的工作单位之前更新的可能性 已完成 。

1

读取完成后,可重复读取操作不会解除共享锁定。

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

2

试试吧。我们无法告诉您单个数据点可能遇到的潜在风险或性能问题(事务隔离级别)。我们对数据,数据量,TPS,数据依赖关系没有其他了解。无论何时表现是一个问题,尝试一下,衡量一下。没有其他答案。

2

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