博客
关于我
[MySQL] MVCC 多版本并发控制实现的事务
阅读量:661 次
发布时间:2019-03-15

本文共 745 字,大约阅读时间需要 2 分钟。

InnoDB引擎中的MVCC(Multi-Version Concurrency Control)是一种用于处理多版本并发控制的高级事务管理机制。通过为每行记录维护多个版本号,MVCC能够在读写频繁的高并发场景下提供较高的性能,同时保证事务的一致性和隔离性。

MVCC工作机制基于每个事务的版本号来维护行记录的可见性和一致性。当事务开始时,系统会为当前用户生成一个唯一的版本号,这个版本号会被同步到所有被修改的行记录中。通过在每行记录中添加两个隐藏字段:"创建版本号"和"删除版本号",MVCC可以精确控制数据的可见性:

  • 在插入新数据时,系统会将当前事务的版本号写入"创建版本号"字段。
  • 在更新操作时,系统会将当前事务的版本号写入"删除版本号"字段,并且将旧版本号设置为当前事务的版本号。
  • 在删除操作时,系统只需要将"删除版本号"字段设置为当前事务的版本号,无需修改其他数据。
  • 在查询操作时,系统会根据事务版本号来筛选数据:创建版本号必须小于等于当前事务版本号,且删除版本号必须存在或小于当前版本号。这保证了查询得到的数据要么是当前或之前版本的数据。

这种设计可以避免传统锁机制对并发操作的阻塞,显著提升了系统的并发处理能力。然而,这也意味着额外的存储开销(隐藏字段的使用)以及在特定场景下可能需要加锁(如在SERIALIZABLE隔离级别下)的问题。

MVCC机制适用于REPEATABLE READ和READ COMMITTED隔离级别。在READ UNCOMMITED隔离级别下,MVCC会直接读取最新的数据版本,而在SERIALIZABLE隔离级别下,系统会对读取的行加锁,确保数据的一致性。这种灵活的并发控制机制使得InnoDB在高并发场景下能够在性能和一致性之间找到较好的平衡。

转载地址:http://tqnmz.baihongyu.com/

你可能感兴趣的文章
poj 3468 A Simple Problem with Integers(线段树 插线问线)
查看>>
poj 3485 区间选点
查看>>
poj 3518 Prime Gap
查看>>
poj 3539 Elevator——同余类bfs
查看>>
Qt笔记——官方文档全局定义(三)Macros宏
查看>>
poj 3628 Bookshelf 2
查看>>
Qt笔记——官方文档全局定义(一)Types数据类型
查看>>
POJ 3670 DP LIS?
查看>>
POJ 3683 Priest John's Busiest Day (算竞进阶习题)
查看>>
POJ 3988 Selecting courses
查看>>
POJ 4020 NEERC John's inversion 贪心+归并求逆序对
查看>>
poj 4044 Score Sequence(暴力)
查看>>
POJ 基础数据结构
查看>>
POJ 题目3020 Antenna Placement(二分图)
查看>>
Poj(1797) Dijkstra对松弛条件的变形
查看>>
SpringBoot为什么不需要xml配置文件?
查看>>
POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
查看>>
Qt笔记——SQLite初探QSqlDatabase QSqlQuery
查看>>
POJ-1163-The Triangle
查看>>
POJ-Fence Repair 哈夫曼树
查看>>