我在最近的 Ubuntu(Debian)服务器上使用 Postgres 9.X,一直在寻找维护脚本示例,但不幸的是一无所获。
Postgres 文档对摘要进行了全面介绍维护对象-- 其数据库应定期:
- 抽真空/分析(+自动抽真空)
- 重新索引
- 聚集?
- 日志旋转
不幸的是,文档没有给出具体的例子,可能是因为涉及的变量太多了。不过,我还是希望有一个基线维护脚本的例子:
- 一个用于小型(大小和使用情况)数据库,预计在未来几年内会增长。
- 安排一点停机时间是可以的。例如,每周一次,客户端应用程序将关闭一段时间,以便 postgres 可以完成其工作。
我已经开始这样做了,请帮助改进它:
#!/bin/bash
# this script maintains a Postgres Database Cluster
# set any needed env vars:
# PGDATABASE, PGUSER, PGPASSWORD, PGHOST, PGPORT, etc.
read -p "Press ENTER to stop Postgres Clients, start maintenance..."
sudo stop websrvr1
sudo stop websrvr2
sleep 2
echo -e "\nStarting backup ..."
# another script for another question
echo -e "\nStarting maintenance ..."
# What is the best order for these?
sudo -u postgres reindexdb --all --system
sudo -u postgres clusterdb --all
sudo -u postgres vacuumdb --all --analyze # --full # warned against
# log rotation? Supposed to be handled automatically,
# but I not yet seen more than one log file.
echo Complete. Type ... to start services.
答案1
默认情况下,Autovacuum 处于启用状态。重新索引和集群并不是真正的基本维护任务。您可以在需要时执行它们以提高性能或(重新索引)修复索引损坏,但它们不是您会盲目定期执行的操作。日志轮换由 Debian 打包框架自动处理。因此,作为基准,您不需要自己执行任何这些操作。
您实际上应该做的是设置备份(首先,pg_dumpall
每天从 cron 作业运行)和监控(例如 Nagios 和 Munin)。然后基于此类监控,您将定期调整服务器设置并尝试提高查询性能。
答案2
我认为清理应该有一个阈值 — 比如说浪费的数据库空间/行数超过 30%。这将节省大量时间和无意义的努力。