初识VACUUM,在维基上查了一下,字面上是真空的意思,完全没有解释我要的postgres的vacuum

What’s VACUUM
通常在对postgres数据库的表做变更后,需要做vacuum,postgres文档描述如下

VACUUM的作用
1、释放再利用用户对表做更新或者删除的行所占据的磁盘空间
PostgreSQL数据的插入,更新,删除操作并不是真正把数据放到数据库空间,如果不定期释放空间的话,由于数据太多,查询速度会下降
2、更新postgres查询计划中使用的统计数据
为了提高查询速度,PostgreSQL会根据统计信息来确定执行计划,如果不及时更新的话,会影响查询速度
3、防止因事务ID的重置而使非常老的数据丢失
PostgreSQL中每一个事务都会产生一个事务ID,事务ID是有上限的,当事务ID达到最大值后,会重新从最小值开始循环,如果不及时把以前的数据释放掉的话,原来的老数据会因为事务ID的丢失而丢失
VACUUM的两种方式
标准 VACUUM
进行回收时不影响数据库的正常使用,清理时不允许对表结构进行修改(推荐)。
VACUUM FULL
可以回收大量空间,但是比标准回收执行慢,运行时需要锁表。
The FULL option is not recommended for routine use, but might be useful in special cases. An example is when you have deleted or updated most of the rows in a table and would like the table to physically shrink to occupy less disk space and allow faster table scans. VACUUM FULL will usually shrink the table more than a plain VACUUM would.




