我们的产品使用PostgreSQL数据库服务器,在数百个客户端部署。其中一些客户端在多年内积累了数十GB的数据。因此,在下一个版本中,我们将引入自动清理程序,逐渐归档并删除旧记录,并在夜间批处理作业期间执行。
如果我理解正确,autovacuum将启动并分析和重新组织元组,因此性能将与存在较少记录时相同。
如果我理解正确,实际磁盘空间不会被释放,因为只有通过VACUUM FULL才会发生这种情况,而autovacuum不会触发VACUUM FULL。
因此,我考虑了一个自动化过程来完成这个任务。
我在http://wiki.postgresql.org/wiki/Show_database_bloat找到了由nagios check_postgres使用的膨胀视图。
这个视图好用吗?如果tbloat>2,需要使用VACUUM FULL吗?如果ibloat太高,需要使用REINDEX吗?
对于作为每日批处理作业运行的以下工作有什么评论吗?
- vacuumdb -Z mydatabase #仅分析性地进行vacuum - select tablename from bloatview order by tbloat desc limit 1 - vacuumdb -f -t tablename mydatabase - select tablename, iname from bloatview order by ibloat desc limit 1 - reindexdb -t tablename -i iname mydatabase 当然,我仍然需要在crontab中包装一个漂亮的perl脚本(我们正在使用ubuntu 12),或者postgresql是否有某种调度程序可以使用?
还是这完全过度了,有更简单的程序吗?
如果我理解正确,autovacuum将启动并分析和重新组织元组,因此性能将与存在较少记录时相同。
如果我理解正确,实际磁盘空间不会被释放,因为只有通过VACUUM FULL才会发生这种情况,而autovacuum不会触发VACUUM FULL。
因此,我考虑了一个自动化过程来完成这个任务。
我在http://wiki.postgresql.org/wiki/Show_database_bloat找到了由nagios check_postgres使用的膨胀视图。
这个视图好用吗?如果tbloat>2,需要使用VACUUM FULL吗?如果ibloat太高,需要使用REINDEX吗?
对于作为每日批处理作业运行的以下工作有什么评论吗?
- vacuumdb -Z mydatabase #仅分析性地进行vacuum - select tablename from bloatview order by tbloat desc limit 1 - vacuumdb -f -t tablename mydatabase - select tablename, iname from bloatview order by ibloat desc limit 1 - reindexdb -t tablename -i iname mydatabase 当然,我仍然需要在crontab中包装一个漂亮的perl脚本(我们正在使用ubuntu 12),或者postgresql是否有某种调度程序可以使用?
还是这完全过度了,有更简单的程序吗?