原文地址:https://github.com/NikolayS/postgres_dba
🐘 postgres_dba
34 个 PostgreSQL 诊断报告,直接在 psql 内使用。 无需代理,无需守护进程,无需外部依赖------只需 SQL。
包括:膨胀估算、索引健康度、锁树、清理监控、查询分析、损坏检查、缓冲池检查等等。输入 :dba 即可使用。

快速开始
bash
git clone https://github.com/NikolayS/postgres_dba.git
cd postgres_dba
bash -c "echo \"\\set dba '\\\\\\\\i $(pwd)/start.psql'\" >> ~/.psqlrc"
通过 psql 连接到任何 Postgres 服务器,然后输入 :dba。
要求 psql 10+。 服务器可以是任意版本。为了获得最佳体验,建议使用最新的 psql 客户端。
报告清单
常规报告 (0--3)
| ID | 报告内容 |
|---|---|
| 0 | 节点信息:主/备、复制延迟、数据库大小、临时文件、WAL、复制槽 |
| 1 | 数据库大小和统计 |
| 2 | 表和索引大小、行数统计 |
| 3 | 负载概况 |
活动与锁
| ID | 报告内容 |
|---|---|
| a1 | 按数据库、用户、状态分组的当前连接 |
| l1 | 锁树(轻量级) |
| l2 | 带等待时间的锁树(PG14+ 使用 pg_locks.waitstart) |
膨胀分析
| ID | 报告内容 |
|---|---|
| b1 | 表膨胀估算 |
| b2 | B-tree 索引膨胀估算 |
| b3 | 通过 pgstattuple 分析表膨胀(较耗时) |
| b4 | 通过 pgstattuple 分析 B-tree 索引膨胀(较耗时) |
| b5 | 缺少统计信息的表(无法估算膨胀) |
损坏检查(使用 amcheck)
| ID | 锁类型 | 报告内容 |
|---|---|---|
| c1 | AccessShareLock | 快速索引检查:btree + GIN(PG18+)。生产环境安全。 |
| c2 | AccessShareLock | 索引 + 堆/TOAST 检查(PG14+)。安全,但会读取所有数据。 |
| c3 | ⚠️ ShareLock | B-tree 父节点检查 --- 检测 glibc/排序规则损坏。建议在克隆实例上使用。 |
| c4 | ⚠️⚠️ ShareLock | 全面检查:heapallindexed + 父节点 + 堆。验证每个元组都被索引覆盖。 |
内存分析
| ID | 报告内容 |
|---|---|
| m1 | 缓冲池内容(使用 pg_buffercache,较耗时) |
索引分析
| ID | 报告内容 |
|---|---|
| i1 | 未使用和极少使用的索引 |
| i2 | 冗余索引 |
| i3 | 缺少索引的外键 |
| i4 | 无效索引 |
| i5 | 索引清理 DDL 生成器(执行 & 回滚) |
清理监控
| ID | 报告内容 |
|---|---|
| v1 | 当前正在进行的清理活动 |
| v2 | 自动清理进度和队列 |
进度监控
| ID | 报告内容 |
|---|---|
| p1 | CREATE INDEX / REINDEX 进度 |
语句分析(pg_stat_statements)
| ID | 报告内容 |
|---|---|
| s1 | 按总时间排序的最慢查询 |
| s2 | 完整查询性能报告 |
| s3 | 按查询类型分组的工作负载概况 |
调优与配置
| ID | 报告内容 |
|---|---|
| t1 | Postgres 参数调优建议 |
| t2 | 具有自定义存储参数的对象 |
| e1 | 已安装的扩展 |
| x1 | 对齐填充分析(实验性) |
| r1 | 创建随机密码的用户 |
| r2 | 修改用户为随机密码 |
可选扩展
某些报告受益于额外的扩展:
| 扩展 | 相关报告 | 安装方法 |
|---|---|---|
pg_stat_statements |
s1, s2, s3 | shared_preload_libraries = 'pg_stat_statements' |
amcheck |
c1, c2, c3, c4 | CREATE EXTENSION amcheck; |
pgstattuple |
b3, b4 | CREATE EXTENSION pgstattuple; |
pg_buffercache |
m1 | CREATE EXTENSION pg_buffercache; |
兼容性
每次提交都会通过 CI 在 PostgreSQL 13 到 18 版本上进行测试。较旧版本(9.6--12)可能可用,但未经主动测试。
支持 pg_monitor 角色------大多数报告不需要超级用户权限(损坏检查需要超级用户权限或显式 GRANT EXECUTE)。
添加自定义报告
在 sql/ 目录中放入 .sql 文件。文件命名格式为 <id>_<name>.sql。第一行必须是 -- 注释,包含描述信息------这将自动成为菜单项。
bash
# 添加或删除报告后,重新生成菜单
bash ./init/generate.sh
推荐工具:pspg
pspg 能让表格输出更易读:
sql
\setenv PAGER pspg
\pset border 2
\pset linestyle unicode
致谢
基于多年来许多人贡献的诊断查询构建而成:
- Gilles Darold (ioguix) --- 膨胀估算查询
- Alexey Lesovsky , Maxim Boguk , Ilya Kosmodemiansky , Andrey Ermakov --- pg-utils 诊断套件
- Josh Berkus , Greg Smith , Christophe Pettus , Quinn Weaver --- pgx_scripts 集合