【问题标题】:Should I still use With(NoLock) in SQL Server queries?我还应该在 SQL Server 查询中使用 With(NoLock) 吗?
【发布时间】:2017-12-12 07:01:32
【问题描述】:

我正在尝试编写一些查询来从数据库中获取数据。我曾经使用 With(NoLock) 来防止 SQL Server 在数据库上放置共享锁。最近我的一个朋友告诉我,现在的默认行为是它不会对读取数据设置任何锁定。

但是,我找不到明确的解释。 我还应该在 SQL Server 中使用 With(NoLock) 吗?

【问题讨论】:

  • 可能请你的朋友指点你一些文章作为证据。
  • 这只是启用 RCSI 时的默认行为(这不是 Azure 上的默认行为) - 但您不应该经常使用 With(NoLock)

标签: sql-server


【解决方案1】:

WITH (NOLOCK) 的行为与将事务隔离级别设置为READ UNCOMMITTED 相同,只是其作用域不同。

但是,请记住,允许 SQL Server 使用不同的隔离级别,具体取决于您正在运行的查询类型。 (INSERT、UPDATE、DELETE 等写操作至少要在READ COMMITTED 下运行)。

你的朋友说得不对,SQL Server 在对表进行读操作时,至少会获取一个模式锁,以防止表结构发生变化。即使您使用READ UNCOMMITTED 隔离级别或WITH (NOLOCK) 提示,此锁也会应用于表。

一般来说,我会避免使用WITH (NOLOCK) 提示。使用表格提示时,您的控制较少。如果可以接受脏读,则使用READ UNCOMMITTED 隔离级别进行连接。

您始终可以更改连接的隔离级别,但不能动态删除WITH (NOLOCK) 提示。当您在每张桌子上使用 WITH (NOLOCK) 时尤其如此。

【讨论】:

  • WITH (NOLOCK) 不推荐用于 SELECT 查询。 IMO 表格提示为您提供更多控制权,因为它针对特定表格并且不适用于每个语句中的每个表格。
  • 这样的话,你是对的,你可以把它限制在一个表中,但是你不能在需要的时候轻易地改变它。如果您对所有表都使用它,我看不出重点,您可以简单地更改隔离级别。我会避免使用它,但是是的,有时它是必要的。
  • 是的,你是对的,WITH (NOLOCK) 并没有被弃用,只是没有WITH 关键字的表格提示。我的错,从答案中删除
【解决方案2】:

Deprecated Database Engine Features in SQL Server 2017

已弃用的功能

在 UPDATE 的 FROM 子句中指定 NOLOCK 或 READUNCOMMITTED 或 DELETE 语句。

替换

从 FROM 中删除 NOLOCK 或 READUNCOMMITTED 表提示 子句。

功能名称

UPDATE 或 DELETE 中的 NOLOCK 或 READUNCOMMITTED

【讨论】:

  • 请记住,最初的问题是关于 SELECT 语句上的“WITH (NOLOCK)”提示,而贬值的是 UPDATE/INSERT 语句上的 NOLOCK,以及没有“WITH”关键字的 SELECT 语句.因此,“SELECT * FROM abc NOLOCK”正在被折旧并替换为“SELECT * FROM abc WITH (NOLOCK)”。
【解决方案3】:

我在 Microsoft 文档中发现以下语句警告在查询中使用 NOLOCKREADUNCOMMITTED 提示

注意:在 SQL Server 的未来版本中,将不再支持在 FROM 子句中使用 READUNCOMMITTED 和 NOLOCK 提示,这些提示适用于 UPDATE 或 DELETE 语句的目标表。在新的开发工作中避免在这种情况下使用这些提示,并计划修改当前使用它们的应用程序。

您可以通过链接https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table 查看文档以获取更多信息。没有提到它是默认行为。

【讨论】:

  • OP 要求仅获取数据,这在使用 with (nolock) 提示和 select 语句时很常见。但是,您引用的警告仅与 updatedelete 语句有关。
猜你喜欢
  • 2020-04-28
  • 2016-03-08
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2017-11-19
相关资源
最近更新 更多