Append-only表无效数据清理
Append-only表无效数据清理#
介绍Append-only表中的多版本基本清理原理以及方式。
对于Append-only表,任何insert/update/delete都会创建新的描述更改的文件。在扫描表时,会合并之前所有的文件然后筛选出有效数据。每次udpate/delete都会导致一些行失效,从而使得之后的扫描性能下降。合并所有文件并产生新的数据文件的过程称为COMPACTION。
OushuDB支持对Append-only表的自动COMPACTION,触发方式为修改量到达一定阈值,由2个参数控制:
autocompact_compact_scale: 无效行占总行数的比例超过该值时,可以触发自动compaction。取值范围为0~1。
autocompact_compact_threshold: 无效行的最低数量,默认为500,即至少存在500行无效数据才会触发compaction。
只有2个参数控制的条件同时满足时,才会触发自动COMPACTION。自动COMPACTION会在后台执行,不会阻塞任何DML,但会阻塞DDL。
COMPACTION的并行度通过GUC autocompact_max_workers控制,可以控制每个main节点上的后台COMPACTION并行度,默认为4。
另外OushuDB也对连续的极小批量数据插入、删除和更新进行了优化,能够将连续的小批量修改进行合并,触发时机由以下参数控制:
autocompact_minor_threshold: 连续的小批量修改会触发minor compaction,默认为1,048,576,即连续的,条数小于1,048,576的修改会自动被合并。
当然用户也可以在执行期间将autocompact_disabled设置为on来暂时禁用自动COMPACTION,然后通过手动COMPACT来获得最优执行效率。参见 compact。