Snapshot Isolation 是否仅提供已提交的内容?(以及一般快照隔离问题。)

Vac*_*ano 5 sql-server deadlock sql-server-2008-r2 isolation-level

所以,我有一些死锁问题。

我看到了两种解决方法。添加read uncommitted到我的数据库或执行快照隔离并添加read committed snapshot.

在对两者进行了一些研究之后,在我看来,它read uncommitted可以允许读取可能永远不会提交到数据库的数据。

另一方面,read committed snapshot只会提供最新的(它是最新的,对吗?)已提交的数据版本(即使数据可能处于更改/事务中间。)

这是正确的吗?

如果是这样,我倾向于快照隔离(我真的不想返回处于更改过程中的数据。)

但是,我的 DBA 告诉我,他最后听说快照隔离存在“问题”。(他没有详细说明问题所在,只是说它不是企业就绪功能。)

所以,这里是我关于快照隔离的问题:

快照隔离功能强大吗?它只是有效吗?

或者是否有我需要注意的“陷阱”?

Rem*_*anu 5

另一方面,读提交快照将仅提供最新提交的数据版本

不正确。快照将为您提供在拍摄快照时提交的数据。这个时刻意味着BEGIN TRAN如果您使用真正的SNAPSHOT隔离级别,则是在您发出时,或者如果您使用read_committed_snapshotRCSI ,则是您的语句开始的时刻。这意味着如果多个更新提交,在同一条记录上,您将不会看到最新的,而是在您“拍摄快照”时提交的更新。把它想象成一张照片:你给数据拍照,之后你只能看到照片,不管后面“真实”的风景如何变化。

快照绝对强大。如果您的 DBA 有反对意见,那么他/她应该能够阐明这些反对意见,以便可以解决或驳回这些反对意见,具体情况就是如此。一切都有权衡和陷阱。索引有权衡和陷阱,这是否意味着您的 DBA 不使用索引?