更新时间:2025-08-26 GMT+08:00
如何清理与回收DWS存储空间?
DWS数据仓库中保存的数据在删除后,可能没有释放占用的磁盘空间形成脏数据,导致磁盘浪费、创建及恢复快照性能下降等问题,如何清理?
清理与回收存储空间对系统的影响如下:
- 删除无用的脏数据,释放存储空间。
- 数据库将进行大量读写操作,可能影响正常使用,建议选择空闲时间执行。
- 数据库的存储空间越大,即数据可能越多,清理的时间越长。
定期进行脏数据清理,可以清理与回收存储空间。不同集群版本下操作步骤有所不同,具体如下:
8.1.3及以上版本:通过管理控制台“智能运维”功能进行启动清理
- 登录DWS控制台。
- 在集群列表中单击指定集群名称。
- 进入“集群详情”页面,切换至“智能运维”页签。
- 在运维详情部分切换至运维计划模块。单击“添加运维任务”按钮。
- 弹出添加运维任务边栏,
- 单击“下一步:定时配置”,配置Vacuum类型,推荐选择“周期型任务”,DWS将自动在自定义时间窗内执行Vacuum。
对于自动Vacuum运维任务,系统对于用户表的处理方法实际采用的是VACUUM FULL操作。VACUUM FULL执行过程中,本身持有8级锁,会阻塞其他业务,导致锁冲突产生,业务本身会陷入锁等待,20分钟后超时报错。因此,在用户配置时间窗内,应尽量避开执行所有处理表的相关业务。
- 确认无误后,单击“下一步:配置确认”,完成配置。
8.1.2及以前版本:手动执行VACUUM FULL进行清理

- VACUUM FULL操作会锁表,VACUUM FULL期间,该表的所有访问会阻塞,并等待VACUUM FULL结束,请合理安排调度时间,避免锁表影响业务。
- VACUUM FULL是对当前表的有效数据抽出来重新整理,同时清理脏数据,该操作会临时占用额外的整理空间(这部分空间待整理完成后释放),因此空间会先增后降,请提前计算好VACUUM FULL所需要的空间再行处理(额外的整理空间大小=表大小* (1 – 脏页率))。
- 连接数据库,执行以下SQL语句查询脏页率超过30%的较大表,并且按照表大小从大到小排序。
1 2 3 4 5
SELECT schemaname AS schema, relname AS table_name, n_live_tup AS analyze_count, pg_size_pretty(pg_table_size(relid)) as table_size, dirty_page_rate FROM PGXC_GET_STAT_ALL_TABLES WHERE schemaName NOT IN ('pg_toast', 'pg_catalog', 'information_schema', 'cstore', 'pmk') AND dirty_page_rate > 30 ORDER BY table_size DESC, dirty_page_rate DESC;
- 判断是否有回显结果。
- 是,对于表大小超过10G的表,则执行3。
- 否,操作结束。
- 将脏页Top5的表,进行VACUUM FULL清理(清理时,如果最高磁盘空间>70%,请串行清理)。
1
VACUUM FULL ANALYZE schema.table_name;
父主题: 集群管理