InnoDB MVCC思路

2017-09-21  本文已影响63人  不明电波

MVCC

MVCC即多版本并发控制。数据库的事务型存储引擎基于提升并发性能的实现会使用MVCC。

MVCC的实现,是通过保存数据在某个时间点的快照来实现的。即是说,事务不管需要执行多长时间,其看到的数据都是一致的。

InnoDB的MVCC

InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。一个保存了行的创建时的系统版本号,一个保存行的过期(删除)时的系统版本号。每开始一个事务系统版本号都会递增,事务开始时刻的系统版本号会作为事务的版本号。

规则

举例:(隔离级别为REPEATABLE READ,以v1代表事务版本号为1)

数据 创建版本 删除版本
row1 abc 1 -
row2 xyz 2 -

事务(v1)插入row1,此时row1创建版本为1
事务(v2)插入row2,此时row2创建版本为2

事务(v3)查询row1和row2,此时满足row1和row2的创建版本小于或等于当前事务版本号,并且删除版本为空或者大于当前事务版本号,创建版本为1的row1、创建版本为2的row2作为查询结果返回

当事务(v3)查询中,事务(v4)删除了row1,并且对row2进行了修改(删除记录然后新增),则此时表结构为:

数据 创建版本 删除版本
row1 abc 1 4 (deleted)
row2 xyz 2 4 (deleted)
row2 xy 4 (inserted)

这时事务(v3)的的查询结果仍然为创建版本为1的row1和创建版本为2的row2

上一篇下一篇

猜你喜欢

热点阅读