罗定建设局网站,市场监督管理局局长,电商平台制作公司,快餐小吃加盟方案#xff11;.MVCC概念
MVCC#xff0c;全称多版本并发控制 MVCC究竟是什么#xff1f; 通俗的来说MVCC就是为了在读取数据时不加锁来提高读取效率的一种办法#xff0c;MVCC解决的是读写时线程安全问题#xff0c;线程不用去抢占读写锁。MVCC中的读就是快照读#xff0c….MVCC概念
MVCC全称多版本并发控制 MVCC究竟是什么 通俗的来说MVCC就是为了在读取数据时不加锁来提高读取效率的一种办法MVCC解决的是读写时线程安全问题线程不用去抢占读写锁。MVCC中的读就是快照读也就是普通的select语句。
2.MVCC原理
mvcc的具体实现通过数据库中的三个隐式字段、undolog、readview
其中三个隐式字段分别是 DB_TRX_ID:最近修改事务IDDB_ROLL_PTR:回滚指针指向这条记录上一个版本用于配合undolog指向上一个版本DB_ROW_ID:隐藏主键如果表结果没有指定主键将会生成该隐藏字段 undolog(回滚日志)
在insert、update、delete的时候产生便于数据回滚的日志
readview读视图
是快照读SQL执行时MVCC提取数据的依据通俗的来说就是select的时候我们需要知道可以读取哪个版本下的数据记录并维护当前活跃的事务read view中包含四个核心字段 m_ids:当前活跃的事务ID集合min_trx_id最小活跃事务IDmax_trx_id预分配事务ID当前最大事务ID因为事务ID是自增的creator_trx_idreadview创建者的事务ID readview中规定了版本链的访问规则trx_id表示当前事务id 1.trx_idcreator_trx_id可以访问该版本说明数据是当前这个事务更改的2.trx_idmin_trx_id可以访问说明数据已经提交了3.trx_idmax_trx_id不可以访问说明事务时在readview生成之后才开启的4.min_trx_idtrx_idmax_trx_id如果trx_id不在m_idx中是可以访问该版本的说明数据已经提交 不同的隔离级别生成readview的时机不同 read committed在事务每执行一次快照时生成readviewrepeatable read仅在同一事务第一次快照读时生成readview后续复用该readview所以每次读取的结果都一样