2010-12-05 50 views
3

当单独的进程正在处理连续化的事务中的连续传入数据时,是否有任何问题使用SNAPSHOT隔离来一致地读取数据以便无需锁定,阻塞或脏/幻像读取进行查看?同时使用可串行化和快照隔离的影响

我们需要读者(保证只读:web数据同步,实时监控视图等)能够读取一致的数据,而不被阻止或阻止更新。我们对所有内容都使用SNAPSHOT,但是出现了太多的一致性故障,因此将更新过程切换到了SERIALIZABLE。

我读过关于但并不完全清楚同时使用不同隔离级别的影响。我见过lock compatibility matrix,并阅读各种信息。这似乎没问题,但我真的很感谢来自具有实践经验的人士的任何明智的指导。

SERIALIZABLE事务正在写入时,是否有任何问题对读取器使用快照隔离?有没有情况会阻止SERIALIZABLE交易?使用SNAPSHOT vs READ COMMITTED(使用READ_COMMITTED_SNAPSHOT ON)有什么好处?

谢谢,任何协助不胜感激:-)

回答

4

读操作下快照隔离级别进行读取从版本存储任何修改的数据。因此,他们受影响只有写道。在所有隔离级别下,写入行为相同。因此,无论事务处理的隔离级别如何,SNAPSHOT读取行为都是相同的。

READ_COMMITTED_SNAPSHOT ON使READ COMMITTED充当SNAPSHOT。实际上,它是SNAPSHOT:提供READ_COMMITTED_SNAPSHOT作为将应用程序移植到SNAPSHOT而不改变代码的快速方法。因此,第一段中的所有内容都适用。

+0

谢谢! SNAPSHOT隔离下的读取是否会导致SERIALIZABLE事务阻塞? (起初我想过使用NOLOCK提示,但读了一些评论指出存在风险,因此SNAPSHOT会更好) – mos 2010-12-05 05:17:27