MVCC机制
2022-06-16 18:52:24 13 举报
MVCC机制
作者其他创作
大纲/内容
指向上条记录
trx_list
2
事务2修改age=20
事务3修改name=李四
up_limit_id
回滚指针
DB_TRX_ID
事务ID
0x234
20
张三
DB_ROLL_PTR
name
3
回滚日志,记录的是之前数据的历史版本
当前出现过的最大的事务 id+1(也可理解为尚未分配的下一个事务id)
age
10
事务1插入一条语句
回滚指针,指向这条记录的上一个版本
活跃事务列表中最小的id
可见性算法:1. 首先比较DB_TRX_ID < up_limit_id, true则当前事务能看到这条记录, false进行下一步判断2. 判断DB_TRX_ID >= low_limit_id, true则代表事务id是在readView生成后才出现的,不可见, false进行下一步判断3. 判断DB_TRX_ID是否在trx_list中, 在:代表在readView生成时,这个事务还是活跃状态,未commit,修改的数据,当前事务也是看不到, 不在:说明这个事务在readView生成之前就已经commit,则可以看到修改的结果数据
undo log
当前系统活跃的事务id列表(未提交的事务id)
read view三大属性
李四
low_limit_id
0x123
幻读: 如果当前的所有操作都是当前读,是不会产生幻读问题,只有当前读和快照读一起使用才会出现幻读
最终undo log 会形成一个链表,链首存储的是最新的旧记录,链尾存储的是最旧的旧记录。undo log不会无限膨胀,会存在一个后台清除线程,purge线程,发现当前记录不需要回滚且不需要参与MVCC的时候就会吧数据清理掉。
最近修改事务id,记录创建当前记录或者最后一个修改的事务id(注意:最后修改的ID,并不是当前事务ID)
当事务在进行快照读的时候,会生成一个读视图来进行可见性判断可见性判断是由可见性算法来确定的
1
read view
null
0 条评论
下一页