PostgreSQL 配置与性能巡检
何时使用
- 新实例上线前做配置基线核查
- 性能抖动 / 慢查询频发,先体检配置
- 等保、合规自查时盘点数据库暴露面
输入
- 方式 A:
postgresql.conf的路径(含生效赋值行) - 方式 B:
SHOW ALL;的输出文本(表格形式name | setting | description) - 方式 C:把文本通过管道传入(
cat postgresql.conf | python scripts/tune.py -)
用法
python scripts/tune.py assets/sample_postgresql.conf
python scripts/tune.py assets/sample_show_all.txt --format json
cat postgresql.conf | python scripts/tune.py -
判定级别
| 级别 | 典型项 |
|---|---|
| HIGH | autovacuum 关闭、连接数大但 work_mem 小(OOM 风险) |
| MEDIUM | shared_buffers 偏小、未开慢查询日志、监听全部网卡、wal_level=minimal |
| LOW | maintenance_work_mem 小、checkpoint 参数保守、random_page_cost 偏高等 |
输出示例(节选,对 sample_postgresql.conf 跑出的问题)
[HIGH] max_connections=500 较大而 work_mem=4MB 偏小,峰值内存≈连接数×work_mem×并发排序,存在 OOM 风险
[MEDIUM] effective_cache_size 未显式设置(默认 4GB),建议设为物理内存的 50–75%
[MEDIUM] log_min_duration_statement 未开启,缺少慢查询日志,难以定位性能问题
[MEDIUM] listen_addresses='*' 监听全部网卡,需配合防火墙限制来源 IP
健壮性
- 缺文件 / 空文件 / 纯注释 / 坏输入:可读错误,退出码 1,不崩溃
- 参数缺失按默认值保守处理;单位(B/KB/MB/GB)自动换算
- 支持
--format json输出结构化结果