Postgres 9 基线维护脚本

Postgres 9 基线维护脚本

我在最近的 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%。这将节省大量时间和无意义的努力。

相关内容