gp有个命令是VACUUM
这个命令主要用来回收过时的表空间,这些过时的空间是怎么产生的呢?
原因是: 由于Greenplum数据库中使用了MVCC事务并发模型,即使任何新事务都不可见,被删除或更新的数据行仍占据磁盘上的物理空间。 过期的行会增加磁盘上的表大小,并最终减慢表的扫描速度
怎么判断表是否需要回收呢:堆表通过查看这个视图gp_toolkit.gp_bloat_diag可以看到,AO表需要使用函数查看__gp_aovisimap_compaction_info
AO表示例:
select * from gp_toolkit.__gp_aovisimap_compaction_info('tablename'::regclass)
--结果
content | datafile | compaction_possible | hidden_tupcount | total_tupcount | percent_hidden
---------+----------+---------------------+-----------------+----------------+----------------
1 | 1 | t | 12210739 | 77775592 | 15.70
0 | 1 | t | 12221159 | 78172002 | 15.63
2 | 1 | t | 12415087 | 78247923 | 15.87
6 | 1 | t | 12110038 | 75859948 | 15.96
4 | 1 | t | 12264102 | 77245247 | 15.88
7 | 1 | t | 12118152 | 77358591 | 15.66
3 | 1 | t | 12234392 | 78113969 | 15.66
5 | 1 | t | 12158128 | 77109657 | 15.77
compaction_possible字段有两种 true false
t 意味着需要回收。
执行vacuum命令,在空闲时执行。