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

相关推荐
竹等寒29 分钟前
Linux-网络安全私房菜(二)
linux·服务器·web安全
早睡冠军候选人42 分钟前
Ansible学习----Ansible Playbook
运维·服务器·学习·云原生·容器·ansible
sulikey42 分钟前
从实验出发深入理解Linux目录权限:r、w、x分别控制什么?能否进入目录到底由谁决定?
linux·运维·服务器·ubuntu·centos
li3714908902 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
久曲健的测试窝2 小时前
Jenkins Share Library教程 —— 开发入门
运维·servlet·jenkins
游戏开发爱好者83 小时前
FTP 抓包分析实战,命令、被动主动模式要点、FTPS 与 SFTP 区别及真机取证流程
运维·服务器·网络·ios·小程序·uni-app·iphone
默 语3 小时前
AI驱动软件测试全流程自动化:从理论到实践的深度探索
运维·人工智能·驱动开发·ai·自动化·ai技术·测试全流程
望获linux4 小时前
【实时Linux实战系列】实时 Linux 的自动化基准测试框架
java·大数据·linux·运维·网络·elasticsearch·搜索引擎
ajax_beijing4 小时前
k8s的ReplicaSet介绍
运维·云原生
纸带4 小时前
USB --SETUP --STATUS阶段
linux·服务器·网络