- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我曾在一个非常大的组织工作,他们必须在大多数查询中使用 NOLOCK
- 因为数据通常在白天通过 ETL 过程更新并锁定应用程序 40% 的工作一天当然不是一个选择。
出于习惯,在我的下一个地方,我继续在所有地方自动使用 NOLOCK
。但自从阅读警告和风险后,我逐渐撤消了这一点,没有指定表提示,让 SQL Server 来做这件事。
但是,我仍然觉得我做的是对的事。在我们使用 NOLOCK
的地方,我从未见过数据翻倍或损坏数据。我在那里待了很多年。自从删除 NOLOCK
之后,我就遇到了行锁减慢/暂停查询的明显障碍,这给人一种我的数据库很慢或不稳定的错觉。实际上,只是有人在某处运行了一个冗长的保存(他们这样做的能力是应用程序的要求)。
我很想听听任何在实践中实际经历过 NOLOCK
的数据损坏或数据复制的人的意见,而不是那些按照他们在互联网上阅读的内容进行操作的人的意见。如果有人可以提供复制步骤来看到这种情况发生,我将特别感激。我正在尝试评估它的风险有多大,风险是否超过了能够在更新的同时运行报告的明显好处?
最佳答案
我见过 NOLOCK 的损坏、重复和不良结果。不是一次,也不是很少。 每个 依赖于 NOLOCK 的部署,我有机会查看都存在正确性问题。诚然,许多人(大多数?)没有意识到也没有意识到,但问题一直都存在。
您必须意识到 NOLOCK 问题不会表现为硬损坏(DBCC CHECKDB 会报告的那种),而是“软”损坏。而且这些问题仅在某些类型的工作负载上很明显,主要是在分析类型(聚合)上。它们会表现为报告中的错误值、分类账中的余额不匹配、错误的部门人数等等。这些问题只有在合格人员仔细检查时才会被视为问题。而且它们很可能会在页面的简单刷新时神秘地消失。所以你很可能有所有这些问题,但没有意识到它们。您的用户可能会接受“有时余额有误,只需再次请求报告就可以了”,而不会向您报告该问题。
还有一些工作负载对NOLOCK问题不是很敏感。如果您显示“帖子”和“评论”,您将不会看到太多 NOLOCK 问题。也许“未答复计数”减少了 2,但谁会注意到?
Ever since removing NOLOCK I am running into the obvious obstacle of rowlocks slowing / pausing queries
我建议评估 SNPASHOT 隔离模型(包括 READ_COMMITTED_SNAPSHOT)。你可能会得到免费的午餐。
关于sql-server - NOLOCK 还是不NOLOCK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24447345/
我知道 with(nolock) 和 (nolock) 相同或几乎相同。 REF:with(nolock) or (nolock) - Is there a difference? 但是nolock怎
一切都基于这样的假设:with(nolock) 完全适合这种情况。已经有很多问题在争论是否使用 with(nolock)。 我环顾四周,无法找到使用 with(nolock) 之间是否存在实际差异:
我想在 Hive 中执行一个选择查询,但是花了很长时间我决定检查我的表锁定状态。显然该表已被某些正在进行的查询锁定。 我知道在这种情况下,SQL 具有with (nolock),我可以在表上应用它。
我在我的程序中声明了一个表,您可以在下面看到: Declare @resultTable Table ( EmpId int, EmpStatusId int, CreatedDateTi
使用 ActiveRecord 时需要添加“WITH NOLOCK”吗?我知道有一种方法可以做到 nHibernate,但在 ActiveRecord 中无法解决这个问题。 感谢您的帮助。 问候, 最
为了处理 SQL 超时,我尝试使用 SqlAzureExecutionStrategy ( https://msdn.microsoft.com/en-us/data/dn456835.aspx )
为什么向查询添加 nolock 会导致它增加执行时间? UPDATE TargetTable SET col1 = c1.RowCnt, col2 = c2.RowCnt
我正在 C#.Net 中创建一个自我项目,通过使用 3 层应用程序,我不想让我的 sql 语句具有事务性,这些语句用于多个存储过程,我一直在使用 WITH(NOLOCK)方法来查询在事务期间用于插入或
我正在开发一个多线程应用程序 (C#),并且 2 个线程同时使用 NOLOCK 更新表,这是一个问题吗?更具体地说,它们都更新相同的记录。 最佳答案 答案是“视情况而定”。 NOLOCK 允许“脏读”
在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST 。有关 NOLOCK 和 READPAST
我正在处理一个糟糕的 View ,它在内部将许多 许多 表连接在一起,其中一些是同一张表。 我想知道,当一个表被连接到自身时,如果 NOLOCK 提示是在一个连接上而不是另一个连接上,它是如何解释的?
今天我在尝试使用 NOLOCK 访问远程表时遇到了一个问题。 .我收到此错误: Remote table-valued function calls are not allowed. 在谷歌搜索这个问
我知道您通常会在表级别应用WITH (NOLOCK),但假设您希望将 15 个表连接在一起。有没有一种更简单的方法可以将 WITH (NOLOCK) 应用于所有表,而不必在每个表名后面写入它? 最佳答
在一个巨大的数据库上工作,我正在提取大量数据。例如我的查询是 select * from temp 这导致我的应用程序用户出错,然后我意识到我的问题是因为我的查询提取数据花费的时间太长。 然后我用 修
在工作中,用户非常乐意使用 Reporting Services 的报表生成器生成自己的报表。 但是,遗憾的是,它生成的查询效率非常低,而且它们不使用“WITH (NOLOCK)” - 对每个人来说都
使用 SQL Server 数据库开发 Spring-Hibernate 应用程序。我们陷入僵局。事务属性是通过 Spring 配置定义的。该应用程序在应用程序代码中实现了悲观锁定。当用户开始处理客户
有人可以给我一些指导,告诉我什么时候应该使用WITH (NOLOCK)而不是SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 各自的优点/缺点是什么?使
背景:我想运行一个对性能至关重要的查询,并且我不关心脏读。 我的问题是;如果我使用连接,我是否还必须在这些连接上指定 NOLOCK 提示? 例如;是: SELECT * FROM table1 a W
我曾在一个非常大的组织工作,他们必须在大多数查询中使用 NOLOCK - 因为数据通常在白天通过 ETL 过程更新并锁定应用程序 40% 的工作一天当然不是一个选择。 出于习惯,在我的下一个地方,我继
我正在尝试在更新查询中添加 with(NOLOCK): UPDATE pth_patchLookup with(nolock) SET ScanDateTime = Getdate() WHERE R
我是一名优秀的程序员,十分优秀!