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

相关推荐
早起鸟儿27 分钟前
docker-Dockerfile 配置
java·linux·运维·docker
虚妄狼31 分钟前
【Docker Desktop】Windows11安装 Docker Desktop
运维·docker·容器
Hello.Reader1 小时前
NGINX 四层上游模块`ngx_stream_upstream_module` 实战指南
运维·nginx
tiantianuser1 小时前
RDMA简介7之RoCE v2可靠传输
服务器·fpga开发·verilog·xilinx·rdma·可编程逻辑
IT成长日记1 小时前
【Docker基础】Docker核心概念:命名空间(Namespace)与资源隔离联系
运维·docker·namespace·资源隔离·命令空间
Mikhail_G2 小时前
Python应用八股文
大数据·运维·开发语言·python·数据分析
再ZzZ3 小时前
Docker安装PaddleOCR并提供接口服务(CPU)
运维·docker·容器
国际云,接待3 小时前
微软云注册被阻止怎么解决?
服务器·网络·microsoft·云原生·微软·云计算
love530love4 小时前
是否需要预先安装 CUDA Toolkit?——按使用场景分级推荐及进阶说明
linux·运维·前端·人工智能·windows·后端·nlp
m0_694845574 小时前
日本云服务器租用多少钱合适
linux·运维·服务器·安全·云计算