我只是想检查一下我对这两件事的理解是否正确。如果相关,我使用的是Postgres 9.4。
我认为在寻求从文件系统中回收空间时,应该真空数据库,例如删除表或大量行后定期。
我认为应该在创建新索引后分析数据库,或者(在表中)添加或删除大量行后(定期),以便查询规划器可以进行良好的调用。
这听起来不错吗?
答案 0 :(得分:6)
vacuum analyze;
收集统计信息,应该尽可能多地运行数据(尤其是批量插入)。它不会锁定对象独占。它加载系统,但值得。它不会减小表的大小,但会分散标记释放的位置(例如删除的行)以供重用。
vacuum full;
通过创建表的副本并切换到表来重新组织表。此真空需要额外的空间来运行,但回收对象的所有未使用的空间。因此,它需要对对象进行独占锁定(其他会话应等待它完成)。应该在数据更改(删除,更新)以及何时可以让其他人等待时运行。
两者在动态数据库
上非常important答案 1 :(得分:1)
正确。
我想补充一点,您可以将default_statistics_target
文件中postgresql.conf
参数的值(默认为100)更改为更高的数字,之后,您应该重新启动服务器并运行{{ 1}}以获得更准确的统计数据。