自动化运维
Ansible、分区、Sharding、Patch。
30 分钟
运维监控、日志与升级
生产 DBA 靠 指标、日志、变更流程 保 SLA。与 /roadmaps/postgresql-dba 运维节点对齐。
学习目标
- 配置
log_min_duration_statement与慢 SQL 日志 - 采集关键指标:连接数、复制 lag、磁盘、事务 ID 年龄
- 了解大版本升级(pg_upgrade / 逻辑迁移)路径
核心概念
日志参数
logging_collector = on
log_directory = 'log'
log_min_duration_statement = 500 # ms,慢 SQL
log_checkpoints = on
log_connections = on
log_lock_waits = on
tail -f $PGDATA/log/postgresql-*.log | grep duration
结合 pg_stat_statements 比单纯 tail 更高效。
必监控指标
-- 连接
SELECT count(*) FILTER (WHERE state = 'active') AS active,
count(*) AS total FROM pg_stat_activity;
-- 复制 lag(主库)
SELECT application_name, sync_state,
pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lag_bytes
FROM pg_stat_replication;
-- 事务 ID wraparound 风险
SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY 2 DESC;
Prometheus 常用 postgres_exporter;告警:磁盘 >85%、lag >100MB、active >80% max_connections。
升级策略
| 方式 | 停机 | 适用 |
|---|---|---|
| pg_upgrade | 短 | 同机大版本 |
| 逻辑复制 / dump-restore | 可控 | 跨 OS、云迁移 |
| 蓝绿 + 切换 DNS | 规划窗口 | 零停机目标 |
升级前:全备 + 扩展兼容性检查(SELECT * FROM pg_available_extensions)。
与 MySQL/Spring Boot 对照
| 项 | PostgreSQL | MySQL 8 |
|---|---|---|
| 慢日志 | log_min_duration_statement | slow_query_log |
| 监控 | postgres_exporter | mysqld_exporter |
| 升级 | pg_upgrade | mysql_upgrade / 原地 |
| 应用感知 | JDBC URL 一般不变 | 同 |
Spring Boot 健康检查:spring.datasource.hikari.connection-test-query=SELECT 1;K8s probe 用同一语句。变更 PG 参数后观察 Hikari 连接获取时间 是否异常。