这是本节的多页打印视图。 .
健康巡检
pgcli PostgreSQL 健康巡检报告指南
pg inspect 用一条命令回答一个问题:这个库健康吗,该先修什么? 它对 PostgreSQL 标准统计视图做一次单快照采样,产出确定性报告——0-100 的健康分,加上按 CRITICAL / WARNING / NOTE / GOOD 分级的诊断条目,每条带证据、修复建议,以及防止"自信地给出错误建议"的限定说明。
它严格只读:每条语句都包在 READ ONLY 事务里执行,绝不写入、除普通读取外不加任何锁,可随时对生产库运行。
适用场景
- 每周 / 值班例行检查 —— 对所有实例跑一遍,只看分数不到 100 的;有没有退化一目了然,不用盯仪表盘。
- “数据库感觉变慢了” —— 在翻 EXPLAIN 计划之前,先拿到 30 秒全貌:缓存命中率、耗时 Top SQL(需
pg_stat_statements)、膨胀、会话堆积。 - 安装 / 升级之后 —— 确认没有危险参数混进配置(比如
fsync = off),autovacuum 确实跟得上。 - 容量决策之前 —— 看清哪些索引从未被扫描(删掉能回收多少空间)、连接数是否在逼近
max_connections。 - 审计与交接 ——
--html生成单个自包含文件,可直接发邮件或归档;--json喂给脚本和监控 agent。
能提前发现的问题
| 问题 | 不巡检你会错过什么 |
|---|---|
| 事务 ID 年龄逼近冻结墙 | 一次被迫停机的 vacuum 紧急事故 |
连接数逼近 max_connections |
高负载时登录失败 |
| 缓存命中率低 | shared_buffers / effective_cache_size 配小了 |
| 超过 1 MiB 的从未使用索引 | 空间浪费与写放大 |
| 表膨胀、从未 vacuum 或关了 autovacuum 的表 | 扫描越来越慢,vacuum 风暴 |
| 大表重顺序扫描 / 非 HOT 更新 | 缺索引和热点更新模式 |
| 长事务与 idle in transaction 会话 | 清理被阻塞、锁等待 |
| 偏离编译默认值的危险参数 override | 悄无声息的持久性或调优错误 |
各项检查独立降级——没装 pg_stat_statements 的库照样出完整报告,只多一条说明该板块为空的 NOTE。