欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > MVCC详解

MVCC详解

2025/4/29 18:38:31 来源:https://blog.csdn.net/GzlAndy/article/details/147491639  浏览:    关键词:MVCC详解

目录

undo日志版本链

read view一致性视图

MVCC过程分析

读事务&写事务


  • Multi-Version Concurrency Control多版本并发控制
  • 已提交可重复读隔离级别实现了MVCC机制

undo日志版本链
  • 一行数据修改MySQL保留修改前数据undo日志)
  • 使用trx_idroll_pointer这些undo日志串联形成一个历史记录版本

read view一致性视图
  • 在可重复读隔离级别下,开启事务后,执行任何查询sql是会生成当前事务的一致性视图视图事务结束之前永远不会发生变化
  • 在读已提交隔离级别下每次执行查询sql都会重新生成一致性视图
  • 一致性视图执行查询所有为提交事务id数组以及已创建最大事务id(max_id)组成
  • 提交事务id数组存在事务idmin_id)
  • 事务任务sql查询结果需要使用查询记录提交trx_id一致性视图作对比决定记录是否当前事务可见

  • 据图对比规则如下
    • 记录trx_id<min_id时,说明在生成一致性视图事务已经提交数据可见
    • 记录trx_id>max_id说明生成一致性视图事务还未开始数据不可见
    • 记录的min_id<=trx_id<=max_idtrx_id一致性视图说明生成一致性视图事务已开始但是未提交数据不可见
    • 记录的min_id<=trx_id<=max_idtrx_id不在一致性视图说明在生成一致性视图时,该事务已提交数据可见

MVCC过程分析

操作

事务A

事务B

事务C

设置隔离级别开启事务

事务A执行查询

此时生成一致性视图

[事务A] 事务A

事务B修改数据提交

事务A再次查询

根据一致性视图[事务A] 事务A比对事务B修改数据不可见还是读取之前数据

事务C执行查询

此时生成一致性视图

[事务A,事务C] 事务C

对比一致性视图事务B修改数据可见

事务A修改数据提交

事务C再次查询

根据一致性视图[事务A,事务C] 事务C

对比事务A修改数据不可见

读事务&写事务

开启事务mysql执行select 真正开启事物生辰一致性视图

mysql执行updateselect ... for update,insertdelete真正开启写事物

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词