什么是 MVCC

发布时间 2023-12-05 16:42:45作者: Lweiis

又双叒叕被面试官问倒了...

MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,主要用于处理多个事务同时访问和修改数据库时的并发问题:

  • 定义: MVCC 允许数据库在事务并发执行时维护不同版本的数据,而不是简单地锁定数据。每个事务在执行时看到的数据版本基于事务开始的时间戳。

  • 多版本: 每次对数据库的修改都会创建一个新版本,这通过为每个事务分配唯一的时间戳实现。因此,不同事务可能同时存在相同数据的多个版本。

  • 读一致性: MVCC 提供了读取一致性,即一个事务在开始后只能看到在其开始时间之前提交的修改。这通过在读取时使用适当的版本来实现。

  • 并发处理: MVCC 减少了锁定和阻塞,允许事务并发执行而不会相互干扰,提高了数据库的性能和吞吐量。

MySQL 8 如何实现 MVCC

在 MySQL 8 中,MVCC 是由存储引擎来实现的,而不是 MySQL 服务器本身。MySQL 8 的默认存储引擎是 InnoDB,它使用 MVCC 来处理并发事务。

实现细节:

  1. 事务ID(Transaction ID):

    • 每个事务在开始时会被分配一个唯一的事务ID。
    • 这个事务ID用于标识事务的开始和结束时间。
  2. 每行记录的版本号:

    • 每行记录都包含两个隐藏的列,即DB_ROW_IDDB_TRX_ID
    • DB_ROW_ID是每行记录的版本号。
    • DB_TRX_ID是对应事务的事务ID。
    • 每行记录可以有多个版本,每个版本对应于修改该行的不同事务。
  3. Read View(读视图):

    • 在每个事务开始时,都会创建一个Read View。
    • Read View包含事务开始时数据库中所有活动事务的快照。
    • Read View确保事务只能看到在其开始时间之前提交的修改。
  4. Undo Log(撤销日志):

    • InnoDB使用撤销日志来存储事务的旧版本数据。
    • 撤销日志用于在事务回滚或MVCC读取时提供旧版本的数据。
  5. Purge(清理):

    • 后台进程负责清理已经提交的事务产生的旧版本数据。
    • 清理过程确保系统中不会累积大量未使用的数据。

个人理解

未完待补充