为什么快照隔离级别下的事务需要S和IX锁?

Art*_*dod 0 sql-server deadlock snapshot isolation-level

我正在调查一个死锁,并且在探查器的死锁xml文件中看到进程process5332cf8快照隔离级别(isolationlevel="snapshot (5)")下运行事务。

但是不知何故,它在页面上保持了IX锁,并希望再获取一个。

这可能是什么原因(除了在发生冲突的中间阶段将隔离级别更改为非快照之外)?

我是否缺少有关Snapshot IL的信息?

PS:完整的xml:http : //ideone.com/yuU9td

Rem*_*anu 5

写操作总是带锁。IX是写锁。至于其他进程(两个SELECT,即process6593498和process5cc1498),它们处于读取提交状态。

如果要避免快照隔离引起的争用,则必须首先将其用于读取事务。