数据仓库服务 GAUSSDB(DWS)-GaussDB(DWS)是否需要定时对常用的表做VACUUM FULL和ANALYZE操作?:VACUUM和VACUUM FULL

时间:2024-10-25 16:23:30

VACUUM和VACUUM FULL

GaussDB (DWS)中,VACUUM的本质就是一个“吸尘器”,用于吸收“尘埃”。而尘埃其实就是旧数据,如果这些数据没有及时清理,那么将会导致数据库空间膨胀,性能下降,更严重的情况会导致异常退出。

VACUUM的作用:

  • 空间膨胀问题:清除废旧元组以及相应的索引。包括提交的事务delete的元组(以及索引)、update的旧版本(以及索引),回滚的事务insert的元组(以及索引)、update的新版本(以及索引)、copy导入的元组(以及索引)。
  • FREEZE:防止因事务ID回卷问题(Transaction ID wraparound)而导致的异常退出,将小于OldestXmin的事务号转化为freeze xid,更新表的relfrozenxid,更新库的relfrozenxid、truncate clog。
  • 更新统计信息:VACUUM ANALYZE时,会更新统计信息,使得优化器能够选择更好的方案执行SQL语句。

VACUUM命令存在两种形式,VACUUM和VACUUM FULL,目前VACUUM对行存表有作用,对列存表无显著的作用,列存表只能依靠VACUUM FULL释放空间。具体区别见下表:

表1 VACUUM和VACUUM FULL

差异项

VACUUM

VACUUM FULL

空间清理

如果删除的记录位于表的末端,其所占用的空间将会被物理释放并归还操作系统。而如果不是末端数据,会将表中或索引中dead tuple(死亡元组)所占用的空间置为可用状态,从而复用这些空间。

不论被清理的数据处于何处,这些数据所占用的空间都将被物理释放并归还于操作系统。当再有数据插入后,分配新的磁盘页面使用。

锁类型

共享锁,可以与其他操作并行。

排他锁,执行期间基于该表的操作全部挂起。

物理空间

不会释放。

会释放。

事务ID

不回收。

回收。

执行开销

开销较小,可以定期执行。

开销很大,建议确认数据库所占磁盘页面空间接近临界值再执行操作,且最好选择数据量操作较少的时段完成。

执行效果

执行后基于该表的操作效率有一定提升。

执行完后,基于该表的操作效率大大提升。

support.huaweicloud.com/dws_faq/dws_03_0089.html