1. 备份与恢复
-
物理备份
-
使用
pg_basebackup
进行全量备份:pg_basebackup -D /backup/path -U postgres -P -Fp -Xs -R
-
结合 WAL 归档实现持续增量备份。
-
-
逻辑备份
-
单库备份:
pg_dump -U postgres -d dbname -f dbname.sql
-
全库备份:
pg_dumpall -U postgres -f alldb.sql
-
定时任务示例(cron):
0 2 * * * pg_dump -U postgres dbname | gzip > /backup/dbname_$(date +\%F).sql.gz
-
-
注意事项
-
定期验证备份文件可恢复性。
-
备份文件存储建议与数据库服务器分离。
-
2. 空间回收与优化(VACUUM)
-
自动VACUUM
-
默认启用,调整配置(
postgresql.conf
):autovacuum = on autovacuum_max_workers = 3 # 根据负载调整 autovacuum_vacuum_cost_limit = 2000 # 提高自动清理效率
-
监控自动清理状态:
SELECT * FROM pg_stat_all_tables WHERE schemaname = 'public';
-
-
手动VACUUM
-
常规清理:
VACUUM;
(不锁表) -
彻底回收空间:
VACUUM FULL;
(锁表,建议维护窗口执行) -
针对大表优化:
VACUUM ANALYZE table_name;
-
-
注意事项
-
避免频繁执行
VACUUM FULL
,可能引起表锁定。 -
监控表膨胀情况:
SELECT pg_size_pretty(pg_total_relation_size('table_name'));
-
3. 统计信息更新(ANALYZE)
-
手动更新统计信息:
ANALYZE table_name; -- 单表 ANALYZE; -- 全库
-
确保查询优化器使用最新统计信息,提升执行计划准确性。
4. 索引维护
-
重建索引
REINDEX TABLE table_name; -- 表所有索引 REINDEX INDEX index_name; -- 单索引
-
监控无效/重复索引:
SELECT * FROM pg_stat_all_indexes WHERE schemaname = 'public';
5. 日志管理
-
配置日志参数(postgresql.conf)
log_destination = 'csvlog' logging_collector = on log_rotation_age = 1d -- 每日轮转 log_filename = 'postgresql-%Y-%m-%d.log' log_statement = 'all' -- 可选(调试用,生产环境慎用)
-
清理旧日志
使用工具如
logrotate
或定时删除:find /var/lib/pgsql/logs/ -name "postgresql-*.log" -mtime +30 -delete
6. 性能监控
-
活动会话监控
SELECT * FROM pg_stat_activity WHERE state <> 'idle';
-
慢查询分析
启用慢查询日志(
postgresql.conf
):log_min_duration_statement = 1000 -- 记录超过1秒的查询
-
关键系统视图
-
pg_stat_user_tables
:表访问统计 -
pg_stat_bgwriter
:后台写入统计 -
pg_locks
:当前锁信息
-
7. 系统健康检查
-
磁盘空间
SELECT pg_size_pretty(pg_database_size('dbname'));
-
连接数监控
SHOW max_connections; -- 最大连接数 SELECT count(*) FROM pg_stat_activity; -- 当前连接数
-
操作系统级检查
-
CPU/内存:
top
,htop
-
磁盘I/O:
iostat
,iotop
-
8. 安全维护
-
权限审核
SELECT * FROM pg_roles; -- 查看用户权限 \dp table_name -- 查看表权限
-
密码更新
ALTER USER username WITH PASSWORD 'new_password';
9. 自动化维护工具
-
pg_cron
安装后定时执行任务:
CREATE EXTENSION pg_cron; SELECT cron.schedule('0 3 * * *', 'VACUUM ANALYZE table_name');
-
外部脚本
结合Shell/Python脚本定期执行维护任务。