更新时间:2024-10-31 GMT+08:00
分享

UB-tree空间管理

当前Astore的索引依赖AutoVacuum和Free Space Map(FSM)进行空间管理,存在回收不及时的问题,而Ustore的索引使用其特有的URQ(UB-tree Recycle Queue,一种基于循环队列的数据结构,即双循环队列),对索引空闲空间进行管理。双循环队列是指有两个循环队列,一个潜在空页队列,另一个可用空页队列,在DML过程中完成索引的空间管理,能有效地缓解DML过程中造成的空间急剧膨胀问题。 索引回收队列单独储存在B-tree索引对应的FSM文件中。

如上图所示,索引页面在双循环队列间流动如下:

  1. 索引空页 > 潜在队列

    索引页尾字段中记录了页面上活跃元组个数(activeTupleCount),在DML过程中,删空一个页面的所有元组,即activeTupleCount为零时会将索引页放入潜在队列中。

  1. 潜在队列 > 可用队列

    潜在队列到可用队列的转化主要是达到一个潜在队列收支平衡以及可用队列在拿页时有页可拿的目的,即当从可用队列拿出一个索引空页用完后,最好能够从潜在队列转化至少一个索引页面到可用队列中,以及每当潜在队列新加入一个索引页面时,能从潜在队列中移除至少一个索引页插入可用队列中,达到潜在队列的收支平衡,以及可用队列有页可用的目的。

  2. 可用队列 > 索引空页

    索引在分裂等获取一个索引空页面时,会先从可用队列中进行查找是否有可以复用的索引页,如果找到则直接进行复用,没有可复用页面则进行物理扩页。

相关文档