Vac*_*ano 5 sql-server deadlock sql-server-2008-r2 isolation-level
所以,我有一些死锁问题。
我看到了两种解决方法。添加read uncommitted
到我的数据库或执行快照隔离并添加read committed snapshot
.
在对两者进行了一些研究之后,在我看来,它read uncommitted
可以允许读取可能永远不会提交到数据库的数据。
另一方面,read committed snapshot
只会提供最新的(它是最新的,对吗?)已提交的数据版本(即使数据可能处于更改/事务中间。)
这是正确的吗?
如果是这样,我倾向于快照隔离(我真的不想返回处于更改过程中的数据。)
但是,我的 DBA 告诉我,他最后听说快照隔离存在“问题”。(他没有详细说明问题所在,只是说它不是企业就绪功能。)
所以,这里是我关于快照隔离的问题:
快照隔离功能强大吗?它只是有效吗?
或者是否有我需要注意的“陷阱”?
另一方面,读提交快照将仅提供最新提交的数据版本
不正确。快照将为您提供在拍摄快照时提交的数据。这个时刻意味着BEGIN TRAN
如果您使用真正的SNAPSHOT
隔离级别,则是在您发出时,或者如果您使用read_committed_snapshot
RCSI ,则是您的语句开始的时刻。这意味着如果多个更新提交,在同一条记录上,您将不会看到最新的,而是在您“拍摄快照”时提交的更新。把它想象成一张照片:你给数据拍照,之后你只能看到照片,不管后面“真实”的风景如何变化。
快照绝对强大。如果您的 DBA 有反对意见,那么他/她应该能够阐明这些反对意见,以便可以解决或驳回这些反对意见,具体情况就是如此。一切都有权衡和陷阱。索引有权衡和陷阱,这是否意味着您的 DBA 不使用索引?
归档时间: |
|
查看次数: |
1007 次 |
最近记录: |