postgresql日常维护

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脚本定期执行维护任务。

相关推荐
love530love29 分钟前
【笔记】PyCharm 中创建Poetry解释器
运维·人工智能·windows·笔记·python·pycharm·conda
黑牛先生38 分钟前
vscode连接本地Ubuntu
linux·运维·ubuntu
网硕互联的小客服2 小时前
为什么服务器突然变慢?从硬件到软件的排查方法
linux·运维·网络·安全
看到我,请让我去学习2 小时前
C语言—Linux环境下CMake设置库(动态/静态)
linux·服务器·c语言·开发语言·数据结构
优雅的落幕2 小时前
从零开始的抽奖系统创作(2)
java·服务器·前端
从零开始学习人工智能3 小时前
Nginx 强制 HTTPS:提升网站安全性的关键一步
运维·nginx·https
努力的搬砖人.3 小时前
Docker 镜像打包到本地
运维·docker·容器
Stephen·You4 小时前
(已解决:基于WSL2技术)Windows11家庭中文版(win11家庭版)如何配置和使用Docker Desktop
运维·docker·容器
塑遂4 小时前
Nginx核心功能
运维·nginx