本文为作者原创,转载请注明出处
mvcc 是什么?
Multi-Version Concurrency Control,多版本并发控制,缩写就是 MVCC。
说得通俗一点就是:MySQL 的数据有很多个版本,假设我们数据库中有个字段:age(年龄),每更新一次 age,MySQL 都会记录一个版本,就像微信 APP 更新那样,有一个版本号。
mvcc 解决了什么问题?
- 读写不冲突,极大的增加了系统的并发性能
- 解决脏读,幻读,不可重复读 等问题
mvcc 原理是什么?
数据库的每个字段都包含了以下信息,就是额外会记录三个字段
db_trx_id:用来记录版本号,就是事务 ID
db_roll_pointer:回滚指针,指向这条记录的上一个版本
db_row_id:隐含的自增ID
这些信息是对用户不可见的。
继续前面的假设,每次开启事务更新 age(年龄) 时候,都会把 事务 ID 赋值给 db_trx_id,这就是一个版本号。并且还会记录上一个版本的位置,即是 db_roll_pointer,方便事务回滚。