我的业务是制作非关键任务的网站和应用程序- 例如.银行软件,太空飞行,重症监护应用等.你明白了.
那么,有了这个庞大的免责声明,在一些Sql语句中使用NOLOCK提示是不是很糟糕?几年前,一位Sql管理员建议我应该使用NOLOCK,如果我对"脏读"感到满意,这会让我的系统性能提高一些,因为每次读取都没有锁定表/行/不管.
我还被告知,如果我遇到死锁,这是一个很好的解决方案.所以,我开始关注这个想法几年,直到一个Sql大师帮我一些随机代码并注意到我的sql代码中的所有NOLOCKS.我被礼貌地责骂,他试图向我解释(为什么这不是一件好事)而且我迷路了.我觉得他的解释的本质是'它是一个解决更严重问题的创可贴解决方案......特别是如果你遇到了死锁.因此,修复问题的根源.
我最近做了一些谷歌搜索,并发现了这篇文章.
那么,有些sql db guru sensei的请赐教吗?
我有一些长时间运行的查询不时出现超时问题和死锁.
我想知道什么时候最适合使用NOLOCK而在哪里?
我是否在更新和插入中使用它?还是读?
我有一份报告显示数据库中的一些数据并且速度很慢。大约需要 2 分钟才能完成。问题是在执行查询时锁定了从中获取数据的表。这种锁定会使某些进程失败,例如 navision。
有什么办法可以通过非阻塞查询来实现吗?