任何数据库都存在表膨胀的风险,数据库设计时,应该识别出会频繁更新(包括新增、删除、更新记录)的表。对表、表空间做出可能达到的最大值的预判。
数据库空闲空间管理,PostgreSQL 8.3及之前前采用的是单一文件管理数据文件空闲空间的方式,PostgreSQL 8.4修改为了对每个数据文件都创建一个空闲空间管理文件来管理空闲空间,但是索引空闲空间由于其特殊性仍旧无法合理管理。并且作为数据库管理员,不应该强依赖于数据库对空闲空间的管理。应该增加定时检查,粒度可以到表空间,也可以到表,当表空间、表超过我们的预期时能够上报告警或者自动触发回收。如果触发回收机制后仍旧超过阈值,则一定要上报告警。防止问题累计直至达到了磁盘空间上限或者表空间上限而导致业务失败。
对于PostgreSQL而言,提供了autovacuum机制来定时扫描处理空闲空间,要合理的设置autovacuum的相关参数,使得其空闲空间管理机制能够正常运行。PostgreSQL强行回收空间有如下方法:
1.对于表,可以使用