【问题标题】:postgresql vacuum analyze many tablespostgresql 真空分析许多表
【发布时间】:2012-08-07 18:25:06
【问题描述】:

我有一个中等大小的表(大约 150 亿行),它由大约 200 个子表组成(即每个子表都继承母表,并且有约束 CHECKS 来优化分区)。

加载每个表的plpgsql代码也会在每个子表上产生索引,但不幸的是(因为它是一个函数),它也不能为它刚刚加载和索引的子表执行vacuum analyze subtable; .

所以,直到整个 DB 的下一个 vacuum analyze 完成,母表上的所有查询都很糟糕并且不使用索引(正如解释所揭示的那样)。

请注意,这一切都适用于 PostgreSQL 8.2.14。

问题

  1. 有没有办法让 plpgsql 函数说,请在上面加糖,结束事务块并执行vacuum analyze subtable?
  2. 有没有一种方法可以使用通配符 (vacuum analyze schema.subtables*) 同时清理/分析多个表?
  3. 或者,是否可以仅对一个架构进行真空/分析?
  4. 是否有任何其他方法可以从 postgresql 中以编程方式对 200 个子表进行清理/分析(是的,我可以将所有子表的名称、折腾和季节转储到 psql 脚本中以使用一些 perl ,然后执行它,但它有点难看)。

【问题讨论】:

    标签: plpgsql postgresql-8.4 vacuum


    【解决方案1】:

    请注意,这一切都适用于 PostgreSQL 8.2.14。

    8.2 在运行了五年后于去年停止了支持,并且 8.2.14 缺少许多在 2009-03-16 之后发现的安全漏洞和错误的修复。您迫切需要使用这十年的版本。

    有没有其他方法可以真空/分析一个 200 个子表 postgresql 中的编程方式(是的,我可以转储名称 在所有子表中,用一些 perl 折腾和调味到 psql 中 脚本,然后执行它,但它有点难看)。

    您可以在 pg_autovacuum 中创建条目并将其留给 autovacuum 守护进程。当然,该守护进程近年来得到了很多的改进,所以这也是更新的另一个原因。

    【讨论】:

    • @kgrttn 感谢您的回答。我绑定到 PostgreSQL 8.2.14,因为我使用的是 Greenplum (4.0.4.0)。我知道 Greeplum 4.2 已经发布了几个月,但它仍在使用 PostgreSQL 8.2.15,不确定它会产生多大的不同。
    • 与其子创建新分区,加载它,然后分析它,为什么不加载它并独立分析它,然后使用ALTER TABLE制作准备好之后它是一个孩子吗?我无法在答案或评论中使用该语法而不会出现错误,因此我想我必须将其作为练习来查找。 :-(
    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多