【问题标题】:Server-side NOLOCK in SQL ServerSQL Server 中的服务器端 NOLOCK
【发布时间】:2010-08-17 06:50:28
【问题描述】:

我知道在 Oracle 数据库中我可以配置一个标志,即在特定数据库上运行的所有选择查询都可以像添加了 NOLOCK 提示一样运行。 SQL Server 中有类似的东西吗?

【问题讨论】:

    标签: sql-server nolock


    【解决方案1】:

    您可以将数据库设置为READ_ONLY 模式,这肯定会改变一些事务规则,但我认为没有更接近全局 NOLOCK 的方法。

    编辑

    如果您希望能够执行 DELETE、INSERT 和 UPDATE,但不希望读者锁定或必须指定提示或隔离级别,您也可以考虑打开 READ_COMMITTED_SNAPSHOT,但语义有再次与 NOLOCK 提示不太一样。

    【讨论】:

      【解决方案2】:

      不在每个数据库级别。您只能通过提示或set transaction isolation level 来完成。您可以将数据库设置为只读模式,默认情况下可能会产生这种效果,但会(顾名思义)阻止写入数据库。

      这对于定期刷新的数据库可能很有用。您将数据库设置为只读并将其设置为可写以进行更新,然后再设置回只读。

      【讨论】:

      • 将数据库设置为读取模式将不允许我执行 DELETE 和 INSERT。这是否意味着我必须为所有“SELECTs”创建一个只读副本?
      【解决方案3】:

      不是针对整个数据库,而是针对您执行的每个查询:

      SELECT a, b
      FROM t1
      WITH (NOLOCK)
      WHERE t1.c = @value
      

      SELECT a, b
      JOIN t1
      ON t1.id = t2.id
      WITH (NOLOCK)
      FROM t2
      WHERE t2.c = @value
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-01
        • 2020-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多