34得票4回答
Is NOLOCK always bad?

我是一名报表开发人员,希望尽可能提高我的查询效率。以前我和一个数据库管理员合作过,他告诉我——我想是因为我总是在生产服务器上处理报表——在每个查询中都要使用NOLOCK。 现在,我与一个数据库管理员合作,他禁止在任何情况下使用NOLOCK,即使我的报表(由于几个表缺乏索引)正在阻止复制和系统...

24得票1回答
(NOLOCK) vs NOLOCK

我在调查一些阻塞问题的时候,看到了一个类似这样的查询: SELECT SomeField FROM SomeTable NOLOCK 我看到了NOLOCK,很好奇它是如何阻塞其他查询的,尤其是DELETE语句。我快速查看了锁定情况,使用了sp_lock,以下是我看到的内容: DB ...

23得票3回答
在每个查询中不使用(nolock)提示的原因 在编写数据库查询时,我们通常会使用锁定机制来确保数据的一致性和完整性。然而,在某些情况下,我们可能会考虑避免使用(nolock)提示。 首先,使用(nolock)提示可以提高查询性能,因为它允许并发访问数据而无需等待其他事务完成。这特别适用于只读操作或对数据一致性要求相对较低的读取操作。 然而,使用(nolock)提示也存在一些潜在的风险。首先,它会导致脏读的可能性增加,即读取到由其他事务正在修改的未提交的数据。这可能导致不准确的结果或错误的处理。 此外,使用(nolock)提示还可能导致不可重复读和幻象读问题。不可重复读是指在同一个事务中,多次读取同一行数据返回了不同的结果,幻象读则是指在同一个事务中,多次查询同一个条件的数据集返回了不同的行数。 最后,如果在涉及关键业务逻辑或需要确保数据一致性的操作中过度使用(nolock)提示,可能会导致数据错误或应用程序异常。 因此,我们在编写查询时应该谨慎使用(nolock)提示,并根据具体情况平衡性能和数据一致性之间的权衡。在某些情况下,使用(nolock)提示可能是合理的选择,但在其他情况下,我们应该优先考虑使用适当的锁定机制来确保数据的正确性。

你有没有被迫解释为什么不使用查询提示?每个访问繁忙服务器的查询中,我都看到了“WITH (NOLOCK)”。开发人员甚至认为这应该成为默认设置,因为他们讨厌在自己的代码中看到它出现数千次。 我试图解释这样做会允许脏读取,并最终导致错误数据,但他们认为性能的权衡是完全值得的。(他们的数据库一团...

11得票1回答
如何重现“由于数据移动,无法继续使用NOLOCK进行扫描”

我偶尔会在一些大型作业中遇到“由于数据移动,无法继续使用NOLOCK进行扫描”的错误,这些作业的选择查询中确实有WITH (NOLOCK)。 我了解这与在发生页面分裂时尝试选择数据有关,导致数据不再位于原来的位置 - 我认为这就是在我的环境中发生的情况。 我应该如何重现这个问题? 我正试...

10得票2回答
由于数据移动,无法继续使用NOLOCK进行扫描。

我们使用的是SQL Server 2000,每晚都会出现一些这样的错误。 Could not continue scan with NOLOCK due to data movement 这个错误是由一个复杂的查询引起的,该查询连接了十几个表。我们的底层数据可能会经常更新。 过去文化上...

9得票1回答
在调用表值函数时使用NOLOCK提示

假设有以下函数: CREATE FUNCTION [dbo].[ufnTest]() RETURNS TABLE AS RETURN SELECT 1 AS Nr 我的实际功能将从许多不同的表中选择实际数据。我(大部分)了解使用nolock提示的风险,并决定在这种情况下我实际上想要它们。...

9得票2回答
在这种情况下使用WITH (NOLOCK)是安全的吗?

场景 我有一个处理并发SELECT和DELETE的表。我的SELECT语句中出现了一些死锁问题。我猜测,其他事务中的DELETE操作正在获取独占锁,并与SELECT的共享锁产生冲突。 详细信息 SQL Server 14.00.3281.6.v1 运行在AWS RDS上 使用案例 ...

8得票1回答
如何证明NOLOCK是造成死锁问题的源头?

我不是想引发一场关于Windows/Mac的讨论。 就个人而言,我不需要任何说服来证明NOLOCK作为一种反射性实践并不是一个好主意。在开发过程中,一切都应该有目的,而不是随波逐流(/赞同) 所以...负责编程的人坚持认为NOLOCK是正确的方法。他建议在所有的临时查询和生产环境中都使用它...

7得票1回答
使用NOLOCK存在哪些问题?有什么方法可以解决这些问题?

我正在研究使用NOLOCK SQL从一个活跃使用的数据库加载数据到报表数据库的危害。我知道使用NOLOCK存在问题,但我正在考虑使用下面解释的策略来对抗这些问题。 我知道有更好的方法,比如日志传送、复制、镜像、AG、集群等来创建副本数据库,但这不是本问题的重点。 目标数据库有一个历史表,保...

7得票1回答
With(NoLock)对查询性能有帮助吗?

大部分我们存储过程中的选择语句都使用了WITH(NOLOCK),我的同事告诉我他们这样做是为了提高性能。现在,我知道这个提示可以帮助处理锁定问题,但它真的能提高性能吗?我在某处读到我们不应该在OLTP数据库中使用NOLOCK提示,但我在我的工作场所看到相反的做法。有人能够对使用NOLOCK提示...