您是否曾经不得不证明不使用查询提示是合理的?

我看到 WITH (NOLOCK) 在访问非常繁忙的服务器的每个查询中。开发人员认为它应该默认打开,因为他们讨厌在代码中看到它数千次。

我试图解释说它允许脏读,最终会得到坏数据,但他们认为性能权衡是值得的。(他们的数据库一团糟;难怪他们有性能问题。)

如果您有一个明确的例子来说明如何针对这种滥用行为提出案例 NOLOCK 提示,我们将不胜感激。

有帮助吗?

解决方案

您选择这样的战斗和战斗很难赢得。我们有一个系统,其中每个DML都用Rowlock提示暗示(不论修改一行或几千行)。我展示了几个示例,为什么它确实损害了性能,但是由于系统已经起作用,因此有抵抗力的变化。请注意,我说服他们足以不使用它。

Nolock拥有它的位置,但我可以推荐一些很好的参考文献,以展示使用它的麻烦:

其他提示

之前在SO上讨论过:

定义非常忙碌。我们的数据量很大(每秒 50k 新行、大型聚合等),并且认为没有必要获取可疑数据

您必须向同事解释了解隔离水平的重要性。向他们展示示例。我在小肯德拉(Little Kendra)上找到的最好,最简单的解释 隔离水平的海报。问他们为什么他们认为他们需要Nolock提示。他们为什么不使用“设置交易隔离级别...”语句?询问他们要解决的情况到底是什么,也许他们有僵局,阻止.. etc。如果他们只是不想握住锁,他们可能会考虑快照隔离水平。

只有问他们,您才能有清晰的图片。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top