SQL Server 是否使用多版本并发控制 (MVCC)?

Zac*_*ith 8 sql-server mvcc

阅读 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 隔离级别的系列文章

  • @RobGrant 那是 [记录](https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide#behavior-when-modifying-data ) RCSI 的行为,以避免丢失更新。我 [cover it](https://sqlperformance.com/2014/05/t-sql-queries/data-modifications-under-rcsi) 在我的链接系列中。作者没有检查SI隔离级别(SQL Server的另一个'MVCC'选项)。 (2认同)