` InnoDB ` 对 MVCC(多版本并发控制)的实现

31 阅读1分钟

InnoDB 对 MVCC(多版本并发控制)的实现主要涉及以下三个关键组件:

  1. 隐藏字段(Hidden Fields):

    • InnoDB 在每个数据行中引入了一些隐藏字段,其中包括 DB_TRX_ID(最后一次修改行的事务 ID)和 DB_ROLL_PTR(指向 undo log 的指针)等。这些字段用于标记每个数据行的版本信息。
  2. Read View:

    • Read View 是事务读取数据时的一个快照。每个事务都有自己的 Read ViewRead View 包含了该事务启动时的系统版本号,用于确定该事务在哪个版本的数据行上建立了视图。Read View 还包括了一组活跃的事务 ID,用于判断哪些事务的修改对该事务是不可见的。
  3. Undo Log:

    • Undo log 记录了每个事务所做的修改。当某个事务对一个数据行进行修改时,InnoDB 将修改前的数据记录到 undo log 中。如果其他事务需要读取该数据行的旧版本,可以通过 DB_ROLL_PTR 找到 undo log 中相应的历史版本。

MVCC 的基本原理是,对于每个数据行,InnoDB 会保存它的多个版本,每个版本都有一个唯一的事务 ID。在读取数据时,事务只能看到在它启动时已经提交的事务所做的修改。这样可以提高并发性,允许事务之间彼此不受影响地读取和修改数据。