23 您是否曾经有过不使用查询提示的理由? 我WITH (NOLOCK)在每一个查询中都看到一个非常繁忙的服务器。关键是,开发人员认为默认情况下应该启用它,因为他们讨厌在代码中看到它数千次。 我试图解释说,这将允许脏读,最终它们将得到错误的数据,但是他们认为性能的折衷是值得的。(他们的数据库是一团糟;难怪他们会遇到性能问题。) 如果您有一个明确的示例,说明如何针对这种滥用NOLOCK提示的情况进行陈述,那将不胜感激。 sql-server locking nolock — 数据神 source
17 您选择自己的战斗,这样的战斗就很难轻易获胜。我们有一个系统,其中每个DML都有ROWLOCK提示(与修改一行或几千行无关)。我展示了几个示例,为什么它确实会影响性能,但是由于系统已经在运行,因此存在对变更的抵制。请注意,尽管如此,我还是说服他们不要使用此功能。 NOLOCK有它的位置,但是我可以推荐一些很好的参考资料来说明使用它的麻烦: Microsoft SQL Server开发客户咨询团队博客– 如果使用NOLOCK提示,则先前提交的行可能会丢失 SQL杂志的Itzik Ben Gan – 聚集索引扫描第三部分 sqlpass.org上的Itkiz Ben Gan – 当心NOLOCK提示 — 桑卡·雷迪(Sankar Reddy) source
11 之前已经在SO上进行了讨论: /programming/2141104/using-nolock-hint-in-ef4/2141802#2141802 /programming/1682240/what-can-happen-as-a-result-of-using-nolock-on-every-select-in-sql-sever 定义很忙。我们的交易量很高(每秒5万个新行,大型聚合等),也看不到需要获取不可靠数据的需求 — gbn source
9 您必须向同事解释了解隔离级别的重要性。给他们看例子。我在Little Kendra的隔离级别海报中找到了最简单的解释。问他们为什么他们认为他们需要nolock提示。他们为什么不使用“设置事务隔离级别...”语句?询问他们到底要修复什么情况,也许他们有死锁,阻塞等等。如果他们只是不想持有锁,他们可能会考虑快照隔离级别。 只有问他们,您才能有清晰的画面。 — 玛丽安 source