你有没有必要证明不使用查询提示?
我在遇到非常繁忙的服务器的每个查询中看到WITH(NOLOCK).开发人员认为它应该默认处于启用状态,因为他们讨厌在代码中看到它数千次.
我试图解释它允许脏读,最终会得到坏数据,但他们认为性能权衡非常值得. (他们的数据库很乱;难怪他们有性能问题.)
如果您有一个明确的例子说明如何针对滥用NOLOCK提示提出案件,那将不胜感激.
解决方法
你选择你的战斗和战斗这样的战斗是不容易的.我们有一个系统,其中每个DML都带有ROWLOCK提示(无论是修改一行还是几千行).我举了几个例子,说明为什么它真的会伤害性能,但是由于系统已经在运行,因此存在变革的阻力.请注意,我说服他们足够不要使用这个.
NOLOCK有它的位置,但我可以推荐一些很好的参考资料,展示使用它的麻烦:
> Microsoft sql Server开发客户咨询团队博客 – Previously committed rows might be missed if NOLOCK hint is used
> Itzik Ben Gan在sql Magazine – Clustered Index Scans Part III
> Itkiz Ben Gan on sqlpass.org – Beware the NOLOCK hint