【问题标题】:How does SNAPSHOT isolation read snapshot data for tempdb?SNAPSHOT 隔离如何读取 tempdb 的快照数据?
【发布时间】:2019-12-27 04:55:11
【问题描述】:

我试图了解 SNAPSHOT 隔离如何将数据拉入 tempdb。我知道由于 tempdb 中的行版本控制而存在事务一致性,但我更好奇首先如何将这些数据复制到 tempdb 中。

documentation 更多地讨论了如何从快照中读取数据,但并未真正涉及如何拍摄快照。在我看来,快照将以序列化方式完成,因为这将是数据库在特定时间的最准确表示。但是,我知道不要假设。

有谁知道这到底是怎么工作的?

【问题讨论】:

    标签: sql sql-server isolation-level snapshot-isolation


    【解决方案1】:

    数据库中的每个更改都与一个“事务序列号”(XSN) 相关联。

    每个快照或 RCSI 查询“从”某个 XSN 开始运行。

    每个修改的行都标有其最后修改的 XSN。

    因此,在查询读取一行之前,它会根据查询的 XSN 检查该行的 XSN。如果在查询开始后该行已被修改,则查询会在版本存储中查找该行的正确版本。

    6 字节 XSN 是添加到行版本控制隔离级别中已修改行的 14 字节开销的一部分。它并非出现在所有行上,而是在修改行时添加(或为带有触发器的表插入)。此外,作为 Azure SQL 数据库和 SQL Server 2019 中 Accelerated Database Recovery 功能的一部分,版本存储已从 TempDb 移出并移入用户数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2014-02-15
      • 2021-01-27
      • 2020-01-08
      • 2019-08-08
      • 2014-01-03
      • 1970-01-01
      相关资源
      最近更新 更多