简单介绍下MVCC?
MVCC 就像是在多线程系统里给每个线程拍一张数据库快照,大家都能读自己那一版,不抢锁、不卡顿,读写互不干扰,是数据库高并发性能的关键机制。
事务版本的作用是什么?
每个事务更新数据的时候,都会生成一个新的数据版本transaction id,事务更新完数据,把transaction id赋值给row trx_id。
介绍下事务数组的作用?
每个事务都有一个事务数组,里面记录了上一个回滚数组的id,事务读取数据有三种变化
- 版本未提交,不可见
- 版本已提交,试图创建后提交,不可见
- 版本已提交,视图创建前提交,可见
总结:
InnoDB的行数据有多个版本,每个数据版本有自己的row trx_id,每个事务或语句有自己的一致性视图。普通查询语句是一致性读,一致性读会根据row trx_id和一致性视图确定数据版本的可见性。