1. 什么是MVCC?
MVCC(Multi-Version Concurrency Control,多版本并发控制) 是 MySQL(InnoDB引擎)实现高并发访问的核心机制之一。它通过在同一时刻保存数据的多个版本,使得:
- 读操作不阻塞写操作
- 写操作不阻塞读操作
- 提高数据库的并发性能
📌 对比锁机制:
- 传统锁(如行锁)会导致读写冲突
- MVCC 通过数据多版本实现非阻塞读
2. MVCC 核心原理
2.1 版本链与隐藏字段
InnoDB 每行记录包含3个隐藏字段:
- DB_TRX_ID(6字节):最近修改该行的事务ID
- DB_ROLL_PTR(7字节):回滚指针,指向Undo Log中的旧版本
- DB_ROW_ID(6字节):行ID(无主键时自动生成)
-- 实际存储结构(伪代码)
row = {
id: 1,
name: "Alice",
DB_TRX_ID: 100,
DB_ROLL_PTR: 0x123456,
DB_ROW_ID: 1
}
2.2 Undo Log(回滚日志)
- 存储数据被修改前的历史版本,形成版本链
- 用于:
- 事务回滚(ROLLBACK)
- MVCC 读一致性视图