我是一名报表开发人员,希望尽可能提高我的查询效率。以前我和一个数据库管理员合作过,他告诉我——我想是因为我总是在生产服务器上处理报表——在每个查询中都要使用NOLOCK。 现在,我与一个数据库管理员合作,他禁止在任何情况下使用NOLOCK,即使我的报表(由于几个表缺乏索引)正在阻止复制和系统...
我在调查一些阻塞问题的时候,看到了一个类似这样的查询: SELECT SomeField FROM SomeTable NOLOCK 我看到了NOLOCK,很好奇它是如何阻塞其他查询的,尤其是DELETE语句。我快速查看了锁定情况,使用了sp_lock,以下是我看到的内容: DB ...
你有没有被迫解释为什么不使用查询提示?每个访问繁忙服务器的查询中,我都看到了“WITH (NOLOCK)”。开发人员甚至认为这应该成为默认设置,因为他们讨厌在自己的代码中看到它出现数千次。 我试图解释这样做会允许脏读取,并最终导致错误数据,但他们认为性能的权衡是完全值得的。(他们的数据库一团...
我偶尔会在一些大型作业中遇到“由于数据移动,无法继续使用NOLOCK进行扫描”的错误,这些作业的选择查询中确实有WITH (NOLOCK)。 我了解这与在发生页面分裂时尝试选择数据有关,导致数据不再位于原来的位置 - 我认为这就是在我的环境中发生的情况。 我应该如何重现这个问题? 我正试...
我们使用的是SQL Server 2000,每晚都会出现一些这样的错误。 Could not continue scan with NOLOCK due to data movement 这个错误是由一个复杂的查询引起的,该查询连接了十几个表。我们的底层数据可能会经常更新。 过去文化上...
假设有以下函数: CREATE FUNCTION [dbo].[ufnTest]() RETURNS TABLE AS RETURN SELECT 1 AS Nr 我的实际功能将从许多不同的表中选择实际数据。我(大部分)了解使用nolock提示的风险,并决定在这种情况下我实际上想要它们。...
场景 我有一个处理并发SELECT和DELETE的表。我的SELECT语句中出现了一些死锁问题。我猜测,其他事务中的DELETE操作正在获取独占锁,并与SELECT的共享锁产生冲突。 详细信息 SQL Server 14.00.3281.6.v1 运行在AWS RDS上 使用案例 ...
我不是想引发一场关于Windows/Mac的讨论。 就个人而言,我不需要任何说服来证明NOLOCK作为一种反射性实践并不是一个好主意。在开发过程中,一切都应该有目的,而不是随波逐流(/赞同) 所以...负责编程的人坚持认为NOLOCK是正确的方法。他建议在所有的临时查询和生产环境中都使用它...
我正在研究使用NOLOCK SQL从一个活跃使用的数据库加载数据到报表数据库的危害。我知道使用NOLOCK存在问题,但我正在考虑使用下面解释的策略来对抗这些问题。 我知道有更好的方法,比如日志传送、复制、镜像、AG、集群等来创建副本数据库,但这不是本问题的重点。 目标数据库有一个历史表,保...
大部分我们存储过程中的选择语句都使用了WITH(NOLOCK),我的同事告诉我他们这样做是为了提高性能。现在,我知道这个提示可以帮助处理锁定问题,但它真的能提高性能吗?我在某处读到我们不应该在OLTP数据库中使用NOLOCK提示,但我在我的工作场所看到相反的做法。有人能够对使用NOLOCK提示...