postgresql vacuum分析了很多表

时间:2012-08-07 18:25:06

标签: plpgsql postgresql-8.4 vacuum

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

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

因此,在整个数据库的下一个vacuum analyze完成之前,母表上的所有查询都会吮吸并且不使用索引(如解释所示)。

请注意,这完全适用于PostgreSQL 8.2.14。

问题

  1. 有没有办法让plpgsql函数说出来,请在顶部加糖,结束事务块并执行vacuum analyze subtable
  2. 有没有办法使用一些通配符(vacuum analyze schema.subtables*)一次真空/分析多个表?
  3. 或者,是否可以真空/分析一个模式?
  4. 还有其他方法可以在postgresql中以编程方式对200个子表进行真空/分析(是的,我可以将所有子表的名称,折腾和季节用perl转换成psql脚本,并执行它,但它有点难看。

1 个答案:

答案 0 :(得分:1)

  

请注意,这完全适用于PostgreSQL 8.2.14。

在经历了五年的运行后,8.2去年失去了支持,而且8.2.14在2009-03-16之后发现了许多修复安全漏洞和漏洞。你迫切需要进入这个十年的版本。

  

有没有其他方法来真空/分析a中的200个子表   postgresql中的程序化时尚(是的,我可以转储名称   所有子表,折腾和季节尝试与一些perl到psql   脚本,并执行它,但它有点难看。

您可以在pg_autovacuum中创建条目并将其保留给autovacuum守护程序。当然,近年来该守护进程已经获得了更好的批次,所以这是更新的另一个原因。