多版本并发控制
也是辅助用时间戳的
mvcc所有数据库都实现了
新老版本如何存储
针对每一个tuple,用指针建一个版本链表。
存储版本的三个方法
1 追加
简单追加有两种思路
新版本放在末尾或者开头
新版本放在末尾的话,索引上来查的是最老版本,追加的时候维护开销大
2 时间旅行
3 存储增量
是时间旅行的改进版
只存储增量的字段,节约历史版本的大小,但想查历史版本,就得回去一步步找
mysql用的第三个
垃圾回收问题
不能无限回收历史版本
回收宗旨:1活着的事务都没有用到的版本 2 回滚版本
如何寻找历史版本
行记录的垃圾回收
页需要做一个标记,当有更新时,才会扫描,后台专用线程
合作清理
事务级别垃圾清理
事务自己记下来,到时候一起清
索引管理
主键索引都是指向版本链表的头(第一个)
辅助索引