文档首页/ 数据仓库服务 DWS/ 常见问题/ 集群管理/ 如何清理与回收DWS存储空间?
更新时间:2025-08-26 GMT+08:00

如何清理与回收DWS存储空间?

DWS数据仓库中保存的数据在删除后,可能没有释放占用的磁盘空间形成脏数据,导致磁盘浪费、创建及恢复快照性能下降等问题,如何清理?

清理与回收存储空间对系统的影响如下:

  • 删除无用的脏数据,释放存储空间。
  • 数据库将进行大量读写操作,可能影响正常使用,建议选择空闲时间执行。
  • 数据库的存储空间越大,即数据可能越多,清理的时间越长。

定期进行脏数据清理,可以清理与回收存储空间。不同集群版本下操作步骤有所不同,具体如下:

8.1.3及以上版本:通过管理控制台“智能运维”功能进行启动清理

  1. 登录DWS控制台
  2. 在集群列表中单击指定集群名称。
  3. 进入“集群详情”页面,切换至“智能运维”页签。
  4. 在运维详情部分切换至运维计划模块。单击“添加运维任务”按钮。

  5. 弹出添加运维任务边栏,

    • 运维任务选择“Vacuum”。
    • 调度模式选择“自动”,DWS将自动扫描Vacuum目标。
    • Vacuum目标选择系统表或用户表:
      • 如果用户业务UPDATE、DELETE较多,选择用户表。
      • 如果创建表、删除表较多,选择系统表。

  6. 单击“下一步:定时配置”,配置Vacuum类型,推荐选择“周期型任务”,DWS将自动在自定义时间窗内执行Vacuum。

    对于自动Vacuum运维任务,系统对于用户表的处理方法实际采用的是VACUUM FULL操作。VACUUM FULL执行过程中,本身持有8级锁,会阻塞其他业务,导致锁冲突产生,业务本身会陷入锁等待,20分钟后超时报错。因此,在用户配置时间窗内,应尽量避开执行所有处理表的相关业务。

  7. 确认无误后,单击“下一步:配置确认”,完成配置。

8.1.2及以前版本:手动执行VACUUM FULL进行清理

  1. VACUUM FULL操作会锁表,VACUUM FULL期间,该表的所有访问会阻塞,并等待VACUUM FULL结束,请合理安排调度时间,避免锁表影响业务。
  2. VACUUM FULL是对当前表的有效数据抽出来重新整理,同时清理脏数据,该操作会临时占用额外的整理空间(这部分空间待整理完成后释放),因此空间会先增后降,请提前计算好VACUUM FULL所需要的空间再行处理(额外的整理空间大小=表大小* (1 – 脏页率))。
  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;
    

  2. 判断是否有回显结果。

    • 是,对于表大小超过10G的表,则执行3
    • 否,操作结束。

  3. 将脏页Top5的表,进行VACUUM FULL清理(清理时,如果最高磁盘空间>70%,请串行清理)。

    1
    VACUUM FULL ANALYZE schema.table_name;