经常调用更新SP的正确隔离级别?

时间:2012-03-08 23:26:59

标签: sql-server isolation-level

假设我有一个跟踪股票价格的表(这个问题的一个容易相关的例子)。我跟踪1000个代码,并且有一个持续接收市场数据并通过存储过程对表格进行更新的流程。

我并不关心同一个自动收报机发生的更新之间的冲突。让我们假设无论出于何种原因,我都可以通过对顺序应用的相同自动收报机进行两次更新(这在我的方案中不会发生)。我希望存储过程尽可能少争用。

在当前场景中,proc被多次同时调用并且超时。

proc当前正在使用REPEATABLE READ作为隔离级别。我没有写proc,所以我不确定为什么选择这个。

我的问题:

  1. 使用REPEATABLE READ可能(间接)导致这些超时吗?
  2. 根据我的上述标准,READ UNCOMMITTED会更好吗?

1 个答案:

答案 0 :(得分:2)

随着隔离级别的增加,并发性也会下降。隔离越高,并发性越低。使用像REPEATABLE READ或SERIALIZABLE这样的高并发级别会导致争用,阻塞和糟糕的并发。

SNAPSHOT除外。快照,又名。行版本控制,是不同的。借助快照ON,读者永远不会阻止作者。对于集中读取并同时写入的工作负载,它通常非常匹配。它有成本,但我强烈建议您首先调查SNAPSHOT启用的性能:

请注意,隔离级别也必须由读者设置。