邯郸景区网站制作,知名企业文化案例,网站制作文章标签,泉州网站设计公司MVCC机制 使用MVCC(Multi-Version Concurrency Control#xff0c;多版本的并发控制协议)机制来实现可重复读(REPEATABLE READ)的隔离级别 MVCC最大的优点是读不加锁#xff0c;因此读写不冲突#xff0c;并发性能好。InnoDB实现MVCC#xff0c;是通过保存数据在某个时间点… MVCC机制 使用MVCC(Multi-Version Concurrency Control多版本的并发控制协议)机制来实现可重复读(REPEATABLE READ)的隔离级别 MVCC最大的优点是读不加锁因此读写不冲突并发性能好。InnoDB实现MVCC是通过保存数据在某个时间点的快照来实现的多个版本的数据可以共存主要是依靠数据的四个隐藏列(也可以称之为标记位)和undo log。其中数据的隐藏列包括了隐含的自增主键(DB_ROW_ID)最近更改的事务ID(DB_TRX_ID)、undo log的指针(DB_ROLL_PTR)、索引删除标记(FLAG数据被删除时并不是立即删除而是打上删除标记进行异步删除)在进行数据修改时当前记录会进行加锁把修改前的数据放入undo log中通过undo log的指针与数据进行关联如果修改失败则恢复undo log中的数据 事务对一条数据进行修改时undolog日志会成为一条记录版本的链表链首是最新的旧记录链尾是最早的旧记录 事务隔离级别READ COMMITTED时对于快照数据总是读取被锁定行的最新一份快照数据 事务隔离级别REPEATABLEREAD时对于快照数据总是读取事务开始时的行数据版本 ReadView ReadView包含四个字段 m_ids 当前活跃的事务id集合 min_trx_id 最小活跃事务id max_trx_id 最大事务id已创建的最大事务id creator_trx_id 快照读创建者的事务id 在READ UNCOMMITED的隔离级别下select都是当前读而在SERIALIZABLE级别下是通过表锁来限制数据所以MVCC是在READ COMMITED和REPEATABLE READ的级别下才会生效 在READ COMMITED级别下每一次select都会重新将系统中所有活跃事务拷贝到每一个列表中生成ReadView。 在REPEATABLE READ级别下每个事务read时会将当前系统中所有活跃事务拷贝到一个列表中生成ReadView后续所有select都复用该ReadView 当执行查询sql时会生成一致性视图ReadView它是由执行查询时所有未提交事务id数组(m_ids)和已创建的最大事务id(max_trx_id)组成查询的数据结果需要跟ReadView做对比从而得到快照结果 https://zhhll.icu/2021/数据库/关系型数据库/MySQL/进阶/24.MVCC机制/ 本文由 mdnice 多平台发布