【发布时间】:2012-12-18 11:30:03
【问题描述】:
我们有一个使用 PostgreSQL 数据库服务器的产品,它部署在几百个客户端上。多年来,他们中的一些人已经收集了 数十 GB 的数据。因此,在下一个版本中,我们将引入自动清理程序,该程序将在夜间批处理作业中逐步归档和DELETE旧记录。
如果我理解正确,autovacuum 会启动并分析和重组元组,因此性能会像存在较少记录时一样。
如果我理解正确的话,实际的磁盘空间不会被释放,因为这只发生在 VACUUM FULL 的情况下,并且不是由 autovacuum 触发的。 p>
所以我正在考虑一个可以做到这一点的自动化流程。
我在http://wiki.postgresql.org/wiki/Show_database_bloat 找到了 nagios check_postgres 使用的膨胀视图。
这种观点有什么好处吗?我是否正确理解如果 tbloat > 2,它可以使用 VACUUM FULL?如果 ibloat 太高,是否可以使用 REINDEX?
以下作业中是否有任何 cmets 作为每日批处理作业运行?
-
vacuumdb -Z mydatabase#vacuum 仅分析 select tablename from bloatview order by tbloat desc limit 1vacuumdb -f -t tablename mydatabaseselect tablename, iname from bloatview order by ibloat desc limit 1reindexdb -t tablename -i iname mydatabase
当然,我仍然需要在 crontab 中将它包装在一个不错的 perl 脚本中(我们使用的是 ubuntu 12),或者 postgresql 是否有某种调度程序我可以使用它?
或者这完全是矫枉过正,有没有更简单的程序?
【问题讨论】:
-
vacuumdb -Z 可能没有必要,autovacuum 似乎在保持分析最新方面做得很好。
标签: postgresql postgresql-9.1 nagios