4

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

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

4

4 回答 4

5

可重复读取将锁定所有已获取的行。在您使用游标获取大量数据的情况下,这可能会导致与其他用户的争用,因为在游标关闭之前,他们无法获得锁来更新游标读取的任何行的可重复读取。

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

另一方面,当您使用较低的隔离级别(例如游标稳定性)时,您可能会在您的事务期间之前获取的行可能会在您的工作单元完成之前被其他事务更新。

于 2010-01-28T14:45:05.763 回答
2

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

于 2010-01-28T14:30:03.047 回答
2

补充已经说过的内容:您不能完全消除死锁。你所能做的就是尽量减少它们发生的可能性。

于 2010-01-28T14:55:16.847 回答
1

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

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

于 2010-01-28T14:29:28.683 回答