5

我只是想检查一下我对这两件事的理解是否正确。如果相关,我使用的是 Postgres 9.4。

我相信在从文件系统中回收空间时应该清理数据库,例如在删除表或大量行之后定期清理。

我认为应该在创建新索引之后或(定期)在从表中添加或删除大量行之后分析数据库,以便查询规划器可以进行良好的调用。

听起来对吗?

4

2 回答 2

7
vacuum analyze; 

收集统计信息,并且应该尽可能多地运行动态数据(尤其是批量插入)。它不会独占锁定对象。它加载系统,但值得。它不会减少表的大小,而是将分散的标记释放出来(例如删除的行)以供重用。

vacuum full;

通过创建表的副本并切换到表来重新组织表。此真空需要额外的空间来运行,但会回收对象的所有未使用空间。因此它需要对对象进行独占锁定(其他会话将等待它完成)。应该在数据更改(删除、更新)以及您可以负担其他人等待时运行。

两者对动态数据库都非常重要

于 2015-06-23T06:01:01.600 回答
1

正确的。

我要补充一点,您可以将文件中的default_statistics_target参数值(默认为 100)postgresql.conf更改为更高的数字,之后,您应该重新启动服务器并运行analyze以获得更准确的统计信息。

于 2015-06-22T21:46:10.760 回答