MVCC多版本带来一个额外空间开销问题,就是存旧版本,但是对于一些所以事务不可见的版本我们可以把他gc了。
版本链带来的问题
怎么处理delete操作:1.delete flag bit 2.空的version 来做墓碑。不能把delete和前面串在一条链上,因为后面插入的话,两个是互相不可见的。
gc的level
其中epochs应该有点像leveldb里面的内存池,将整个池放回去。
version gc
线程跟新后,将上一个版本放入,vacuum,然后判断是不是活跃的事务都大于15,如果是的话,就意味着他们是不可见的,因为他们看见的是线程跟新后的version,然后就可以gc了。
gc条件
可以压缩delta,因为15还在活跃要保留10,55保留50 20,然后压缩50为一个consolidated delta
复用
Resue slot in delta table的话,局部性就不是很好。