数据库 · 主观题 · 第 47 题
计算机基础面试八股 · 第 47 题
什么是 MVCC?在可重复读隔离级别下它是怎样工作的?
参考答案
1. MVCC(多版本并发控制)让读写互不阻塞:写操作生成新版本,快照读读取合适的旧版本,不加锁。
2. 实现要素:每行有隐藏列 trx_id(最后修改它的事务 ID)和 roll_pointer(指向 undo log 中的上一版本),多个版本串成版本链。
3. Read View 包含:生成时的活跃事务 ID 列表 m_ids、最小活跃 ID min_trx_id、下一个待分配 ID max_trx_id、创建者 creator_trx_id。
4. 可见性判断:trx_id 等于自己,可见;小于 min_trx_id,说明生成快照前已提交,可见;大于等于 max_trx_id,不可见;位于两者之间时,在 m_ids 中(未提交)不可见,否则可见。不可见就沿版本链继续找。
5. RR 下事务第一次快照读生成 Read View 并一直复用,所以可重复读;RC 每次快照读都新建。
6. 当前读(UPDATE、SELECT … FOR UPDATE)读最新版本并加锁,不走 MVCC;RR 下靠临键锁防止幻读。
解析
版本链 + Read View 判断规则 + RC/RR 区别是三个得分点。