阅读 IBM 网站HERE上发布的 CouchDB 的旧概述,我惊讶地发现以下内容:
大多数现代数据库已经开始从锁定机制转向 MVCC,包括 Oracle(自 V7 起)、MySQL(与 InnoDB 一起使用时)和 Microsoft® SQL Server 2005 及更高版本。
我目前使用 SQL Server 相当多(V2012)并且从未考虑过可能存在任何形式的 MVCC。我之前也在with (tablock, holdlock)存储过程中使用过。
SQL Server 是否真的在任何地方实现了 MVCC,它如何与是否实现的想法相协调with (tablock, holdlock)?
Pau*_*ite 16
SQL Server 真的在任何地方都实现了 MVCC
是的,从 SQL Server 2005 开始。
SQL Server 术语是“行版本隔离级别”。请参阅从锁定和行版本控制开始的产品文档树。请特别注意,有两个单独的“MVCC”实现,使用行版本控制(RCSI) 和快照隔离(SI) 的读提交隔离。
这如何与是否存在的想法相协调
with (tablock, holdlock)?
使用该提示组合可以序列化对整个表的访问。它是可用的并发最少的选项,因此使用这些提示应该非常少见。是否可以用 RCSI 或 SI 隔离代替特定用途取决于具体情况。如果您希望我们详细解决该方面的问题,您可以使用特定示例提出后续问题。
您可能还想阅读我关于 SQL Server 隔离级别的系列文章。