【发布时间】:2015-12-15 19:32:19
【问题描述】:
我之前已经多次阅读和使用 with(nolock) 提示,但我对特定案例有疑问。
就我而言,我有一组引用和更新一个数据库的代码。
此代码旨在以单线程方式运行。
几个月前,他们决定在不更改代码的情况下使其成为多线程。他们的做法是让每个不同的“代码处理器”管理不同的商店组。
例如,处理器 1 负责存储 1 到 20,处理器 2 负责存储 21 到 40,依此类推。
在我们开始陷入僵局之前,一切似乎都很好。死锁总是在页面上......如果锁只在行上,我们将永远不会出现死锁,因为来自一个处理器的数据永远不会与来自另一个处理器的数据发生冲突。基于这个理论,我决定在每个不需要锁定的选择上加上 With(Nolock) 提示(还没有被放入 prod 中)......这使得我的死锁在我的实验室中消失了。
一切看起来都很好,直到我的同事用THIS 的文章来找我,这篇文章把我吓坏了...... 然后我读了THAT...
在我的情况下使用 With(Nolock) 提示是否存在危险...处理器之间的数据永远不会发生冲突?
【问题讨论】:
-
调查快照隔离。它消除了很多阻塞,并且比只读访问提交的读取更加一致。
标签: sql-server deadlock nolock