【问题标题】:How do I avoid read locks in my database?如何避免数据库中的读锁?
【发布时间】:2010-09-07 09:59:52
【问题描述】:

如何避免数据库中的读锁?

欢迎回答多个数据库!

【问题讨论】:

    标签: sql database performance locking


    【解决方案1】:

    在 SQL Server 中,您可以在选择语句中使用 with(nolock) 关键字。例如:

    Select table1.columna, table2.columna
    from table1 with(nolock), table2 with(nolock)
    

    确保为查询中的每个表/视图指定 with(nolock)。

    【讨论】:

    【解决方案2】:

    在Oracle 中,默认操作模式是已提交的 隔离级别,其中select 语句不会被另一个修改它正在读取的数据的事务阻塞。 来自Data Concurrency and Consistency

    事务执行的每个查询只能看到在查询(而不是事务)开始之前提交的数据。 Oracle 查询从不读取脏(未提交)数据。

    【讨论】:

      【解决方案3】:

      Jeff Atwood 有一篇关于这个主题的好帖子:

      http://www.codinghorror.com/blog/archives/001166.html

      【讨论】:

      • 请至少总结答案而不是直接链接。此链接现已失效。
      • 已更新链接(可能):blog.codinghorror.com/deadlocked 基本上,该帖子建议使用 nolock 查询提示或使用 Read Committed Snapshot 隔离级别。
      【解决方案4】:

      在 Firebird 中,作者从不阻塞读者,也没有脏读。只有读提交和快照隔离级别。
      它使用多代引擎(我相信像 oracle)而不是简单的页面或记录锁定。

      【讨论】:

        【解决方案5】:

        PostgreSQL 还使用 MVCC(多版本并发控制),因此使用默认事务隔离级别(已提交读),您永远不应该阻塞,除非有人在数据库上进行维护(删除/添加列/表/索引/ 等)。

        【讨论】:

          猜你喜欢
          • 2015-01-07
          • 1970-01-01
          • 1970-01-01
          • 2011-05-05
          • 2015-08-03
          • 1970-01-01
          • 2018-05-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多