【问题标题】:When should one vacuum a database, and when analyze?什么时候应该清理数据库,什么时候分析?
【发布时间】:2015-06-22 18:27:46
【问题描述】:

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

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

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

听起来对吗?

【问题讨论】:

  • 两者都是自动完成的,因此除非出于特定原因,否则您无需手动运行它们。这在手册的Routine Vacuuming 中有详细介绍。

标签: postgresql vacuum


【解决方案1】:
vacuum analyze; 

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

vacuum full;

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

在动态数据库上两者都非常important

【讨论】:

    【解决方案2】:

    正确。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 2021-09-12
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多