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