恢复磁盘空间
为了保证MVCC对旧版本数据的可见性,GBase 8c数据库在对数据进行UPDATA或DELETE操作后不会立即删除该行的旧版本。在所有事务都不再需要旧版本数据时,需要运行VACUUM命令回收被占用的空间,避免磁盘空间无限制增长。在Coordinator节点和Datanode节点上都应该做此操作。
更新规划期统计信息
GBase 8c数据库的查询优化器需要调用表的统计信息。这些统计信息由ANALYZE命令收集(并存储在系统目录pg_statistic中)。ANALYZE命令可以作为VACUUM的一个可选步骤被调用,也可以直接调用。在Coordinator节点和Datanode节点上都应该做此操作。语法:
ANALYZE [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ]
l VERBOSE:允许显示进度消息。
l table_name:要分析的一个指定表的名称(可以是模式限定的)。如果省略, 当前数据库中所有常规表、分区表和物化视图都会被分析(但不包括外部表)。 如果指定的表是分区表,则分区表的继承统计信息以及各个分区的统计信息都会更新。
l column_name:要分析的一个指定列的名称。默认是所有列。
更新可见性映射
清理机制为每个表维护一个可见性映射,用来跟踪哪些页面只包含对所有活动事务可见的元组。
防止事务ID回滚失败
GBase 8c数据库的MVCC事务依赖于对事务ID(XID)的比较:如果一个插入事务的XID大于当前事务的XID,则插入操作就是属于“未来的”操作,对当前事务不可见。但是由于当前最大可支持事务数40亿,一旦超出40亿,则XID从0开始重新计数。如果一个长事务超过40亿事务数的时间,则本来属于过去的事务会突然变成未来事务,会导致灾难性的数据丢失。为了避免这种情况发生,需要至少在每20亿事务清理数据库中的所有表。
为了跟踪一个数据库中最老的未冻结XID的年龄,VACUUM在系统表pg_class和pg_database中存储XID的统计信息。表pg_class的relfrozenxid列包含上一次全表VACUUM所用的冻结截止XID。表pg_database的datfrozenxid列是出现在该数据库中的未冻结XID的最小值。
自动请理后台进程
GBase 8c数据库提供了autovacuum用于控制数据库自动清理功能的启动。自动清理进程运行的前提是将track_counts设置为true。该配置需要在所有的CN和DN节点均设置。




