DeepSeek总结的postgres_dba诊断报告使用

原文地址: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 集合

许可证

BSD 3-Clause

联系方式

Nikolay Samokhvalov --- nik@postgres.ai

相关推荐
@insist1234 小时前
信息安全工程师-数据库安全全体系解析与最佳实践
数据库·安全·软考·信息安全工程师·软件水平考试
_ku_ku_5 小时前
数据库系统原理 · 事务管理与恢复 · 自学总结
数据库·oracle
lifewange7 小时前
Redis 集合(Set)运算完全指南
数据库·chrome·redis
TDengine (老段)7 小时前
TDengine RAFT共识协议 — 选举、日志复制、快照与仲裁
android·大数据·数据库·物联网·架构·时序数据库·tdengine
Full Stack Developme8 小时前
Spring Boot 事务管理完整教程
java·数据库·spring boot
m0_7020365310 小时前
mysql如何通过索引减少行锁范围_mysql索引与加锁逻辑
jvm·数据库·python
qxwlcsdn10 小时前
如何用 IndexedDB 存储从 API 获取的超大列表并实现二级索引
jvm·数据库·python
phltxy10 小时前
Redis 主从复制
java·数据库·redis
2301_8092445310 小时前
C#怎么使用协变和逆变 C#泛型中的in和out关键字协变逆变是什么意思怎么用【语法】
jvm·数据库·python
知识汲取者10 小时前
巨量引擎营销 API 完整文档
开发语言·数据库·python