多版本并发控制(Multi-version Concurrency Control),不同于基于锁的并发控制,它让读写操作互不阻塞,每一个写操作都会创建一个新版本的数据,读操作会从有限多个版本的数据中挑选一个最合适的结果直接返回,由此解决了事务的竞争条件。
transaction id
事务ID,唯一自增
db_trx_id
InnoDB表隐藏字段,记录当前数据对应的事务ID
db_roll_ptr
InnoDB表隐藏字段,指向 undo log 中的回滚段
consistent read view
一致性读视图,又称read-view,由3部分组成
rw_trx_ids
一个数组,存储了启动但未提交的事务ID
low_limit_id
rw_trx_ids 中的最小值
up_limit_id
rw_trx_ids 中的最大值+1
consistent read
一致性读,又称快照读,保证事务中的 SELECT 看到的数据是一致的
current read
当前读,读取当前值(最新版本),以保证事务的一致性
各隔离级别下的 MVCC 工作原理都一样,区别在于生成 read-view 的时机不同:RC 在 SELECT 瞬间生成,RR 在事务启动瞬间生成。
快照读适用于普通 SELECT,现在事务中 SELECT 一行记录:
db_roll_ptr
找出可见版本、计算历史数据当前读,直接访问位于主键索引的当前值,因此要利用基于锁的并发控制:
UPDATE 更新当前值,加X锁。
SELECT FOR UPDATE 访问当前值,加X锁。
SELECT LOCK IN SHARE MODE 访问当前值,加S锁。
原文:https://www.cnblogs.com/mougg/p/13839102.html