云数据库 RDS-AutoVacuum介绍和调优:表膨胀

时间:2024-12-20 17:08:41

表膨胀

由于MVCC机制,PostgreSQL的DELETE操作并不会真正删除元组,而是将其标记为已删除状态,这些被标记为删除的元组称为死元组(dead tuples),UPDATE也是同理,可以看成是先DELETE然后再INSERT;由于DELETE并不是真正的删除数据,死元组依旧占用磁盘空间,就会出现虽然查询表数据很少,但是磁盘占用空间很大,这样就会形成表膨胀。

vacuum可以用来解决表膨胀的问题,vacuum会清理死元组,但是并不会重新组织活元组在表上的存储位置,其会维护表的空闲空间映射(FSM)以供接下来的元组INSERT操作从而避免占用更多的空间。

vacuum full则更干脆一些,会对原表进行重建,但是vacuum full会对表进行锁定,在执行vacuum full期间无法对表进行读写操作。同时,如果表的数据量太大,在使用vacuum full时执行时间会很长,请在业务低峰期进行操作。

support.huaweicloud.com/usermanual-rds/rds_pg_08_00015.html