
# 如何清理与回收DWS存储空间？
DWS数据仓库中保存的数据在删除后，可能没有释放占用的磁盘空间形成脏数据，导致磁盘浪费、创建及恢复快照性能下降等问题，如何清理？
清理与回收存储空间对系统的影响如下：
- 删除无用的脏数据，释放存储空间。
- 数据库将进行大量读写操作，可能影响正常使用，建议选择空闲时间执行。
- 数据库的存储空间越大，即数据可能越多，清理的时间越长。
定期进行脏数据清理，可以清理与回收存储空间。不同集群版本下操作步骤有所不同，具体如下：
#### 8.1.3及以上版本：通过管理控制台"智能运维"功能进行启动清理
1. 登录[DWS控制台](https://console.huaweicloud.com/dws)。
2. 在集群列表中单击指定集群名称。
3. 进入"集群详情"页面，切换至"智能运维"页签。
4. 在运维详情部分切换至运维计划模块。单击"添加运维任务"按钮。 
   ![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000001389255541.png "点击放大")
   
   
5. 弹出添加运维任务边栏。 
   - 运维任务选择"Vacuum"。
   
   - 调度模式选择"自动"，DWS将自动扫描Vacuum目标。
   
   - Vacuum目标选择系统表或用户表：
     - 如果用户业务UPDATE、DELETE较多，选择用户表。
     
     - 如果创建表、删除表较多，选择系统表。 ![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000002350860392.png "点击放大")
       
      
   
   
   
   
6. 单击"下一步：定时配置"，配置Vacuum类型，推荐选择"周期型任务"，DWS将自动在自定义时间窗内执行Vacuum。 
   ![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000002350861052.png "点击放大")
   ![](https://support.huaweicloud.com/dws_faq/public_sys-resources/note_3.0-zh-cn.png)
   对于自动Vacuum运维任务，系统对于用户表的处理方法实际采用的是VACUUM FULL操作。VACUUM FULL执行过程中，本身持有8级锁，会阻塞其他业务，导致锁冲突产生，业务本身会陷入锁等待，20分钟后超时报错。因此，在用户配置时间窗内，应尽量避开执行所有涉及处理表的业务。
   
   
7. 确认无误后，单击"下一步：配置确认"，完成配置。
 
#### 8.1.2及以前版本：手动执行VACUUM FULL进行清理
![](https://support.huaweicloud.com/dws_faq/public_sys-resources/notice_3.0-zh-cn.png)
1. VACUUM FULL操作**会锁表，**VACUUM FULL期间，该表的所有访问会阻塞，并等待VACUUM FULL结束，请合理安排调度时间，避免锁表影响业务。
2. VACUUM FULL是对当前表的有效数据抽出来重新整理，同时清理脏数据，该操作会临时占用**额外的** **整理空间** （这部分空间待整理完成后释放），因此空间会先增后降，请提前计算好VACUUM FULL所需要的空间再行处理（**额外的整理空间大小** **=** **表大小\* (1 -- 脏页率)**）。
 
1. 连接数据库，执行以下SQL语句查询脏页率超过30%的较大表，并且按照表大小从大到小排序。 
   ```
   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. 将脏页Top 5的表，进行VACUUM FULL清理（清理时，如果最高磁盘空间\>70%，请串行清理）。
   
   ```
   VACUUM FULL ANALYZE schema.table_name;
   ```
   
   
 
