文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 集群性能/ 删除表数据后执行了VACUUM,但存储空间并没有释放
更新时间:2024-07-01 GMT+08:00

删除表数据后执行了VACUUM,但存储空间并没有释放

问题现象

删除表数据后执行了VACUUM,但是存储空间并没有释放。

原因分析

  • 执行VACUUM时,对某些表可能没有权限,或者数据库本身并没有太多的数据膨胀。
  • 执行VACUUM,默认清理当前用户在数据库中拥有权限的每一个表,没有权限的表则直接跳过回收操作。
  • 参数vacuum_defer_cleanup_age不是0,该参数在老版本默认为8000,表示最近8000个事务产生的脏数据不进行回收。
  • 为了保证事务可见性,产生脏数据的事务号,如果大于当前活跃的老事务号,则这部分脏数据也不会清理。

处理方法

  • 建议对单个表执行VACUUM FULL命令,命令格式为“VACUUM FULL 表名”。
  • 如果您对表没有权限,请联系数据库管理员或表的所有者进行处理。
  • 对于vacuum_defer_cleanup_age不是0的场景,可以将此参数改为0,取消VACUUM的事务延迟。
  • 对于存在老事务的场景,重启集群再重新执行VACUUM FULL可以保证空间一定回收,否则只能等老事务结束再执行VACUUM FULL。