KingbaseES 中,元组被删除或更新后,其占用的空间并不会被释放。用户必须利用VACUUM回收这些空间。
VACUUM主要进行三部分工作:
1.对指定表的每个页面进行检查,回收这些被删除元组以及指向它们的索引项占用的空间。回收完成后,这些空间可以继续被本表(索引)使用。
2.对所有页面进行检查和回收完后,对象(表和索引)中可能会出现大量全空的页面。为提高空间利用率,如果回收过程中发现表中存在大量全空的区(页面数超过1000,或超过该表总页面数的1/16), VACUUM操作还会将这些页面从表中删除,这样别的数据库对象也可以使用这部分空间。注意:VACUUM不会删除索引中的全空页面。
3.VACUUM处理过程中,还会收集被处理对象的各种统计信息,操作最后,VACUUM会将这些统计信息记录到相应的系统表中。
这些统计信息包括:sys_class中的reltuples、relpages、relhasindex、relhaspkey、relfrozenxid列;如果指定了ANALYZE选项,则还包括sys_statistic表;如果没有指定TableName,则还包括sys_database表的datfrozenxid列。