您是否曾经不得不证明不使用查询提示?
我WITH (NOLOCK)
在每一个查询中都看到了一个非常繁忙的服务器。开发人员认为它应该默认打开,因为他们讨厌在代码中看到它数千次。
我试图解释它允许脏读,它们最终会得到坏数据,但他们认为性能折衷是值得的。(他们的数据库一团糟;难怪他们有性能问题。)
如果您有一个明确的例子说明如何提出反对这种滥用NOLOCK
提示的案例,那将不胜感激。
您是否曾经不得不证明不使用查询提示?
我WITH (NOLOCK)
在每一个查询中都看到了一个非常繁忙的服务器。开发人员认为它应该默认打开,因为他们讨厌在代码中看到它数千次。
我试图解释它允许脏读,它们最终会得到坏数据,但他们认为性能折衷是值得的。(他们的数据库一团糟;难怪他们有性能问题。)
如果您有一个明确的例子说明如何提出反对这种滥用NOLOCK
提示的案例,那将不胜感激。
你选择你的战斗,这样的战斗不会轻易获胜。我们有一个系统,其中每个 DML 都使用 ROWLOCK 提示进行提示(无论修改一行还是数千行)。我展示了几个例子,为什么它确实会损害性能,但由于系统已经在工作,因此存在改变的阻力。请注意,我已经足够说服他们不要继续使用它。
NOLOCK 有它的位置,但我可以推荐一些很好的参考资料来展示使用它的麻烦:
之前已经在 SO 上讨论过:
定义非常忙碌。我们的数据量很大(每秒 5 万行新行、大型聚合等),而且我们也不需要获取不可靠的数据
您必须向您的同事解释了解隔离级别的重要性。向他们展示示例。我在 Little Kendra 的隔离级别海报上找到了最好和最简单的解释。问他们为什么他们认为他们需要 nolock 提示。他们为什么不使用“设置事务隔离级别……”语句?询问他们想要解决的具体情况是什么,也许他们有死锁、阻塞等。如果他们只是不想持有锁,他们可能会考虑快照隔离级别。
只有问他们,你才能有一个清晰的画面。