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

相关推荐
isNotNullX26 分钟前
智能问数技术路线怎么选?从Text-to-SQL到Data Agent一次讲清
数据库·oracle
鸽芷咕28 分钟前
换库不申请停机窗口?金仓KFS数据集成软件双轨并行,还真行
数据库
鸽芷咕39 分钟前
月底报表又把库拖垮了?聊聊金仓数据库KES的列存储和真本事
数据库
Juicedata42 分钟前
面向 EB 级 AI 存储:JuiceFS 企业版架构演进
数据库·人工智能·架构
数据库小学妹1 小时前
MySQL表碎片与 OPTIMIZE TABLE:空间回收的代价与边界
数据库·后端·mysql
java_logo1 小时前
Docker 部署 Hue:轻松搭建数据库与数据仓库 SQL 查询平台
数据库·数据仓库·sql·docker·hue·部署教程·轩辕镜像
Davina_yu1 小时前
1、count(*)、count(1) 和 count(单个字段) 的区别
数据库
锦衣夜行?1 小时前
Oracle 数据库安装失败清理残留步骤
数据库·oracle
时间售卖铺1 小时前
MySQL 表的约束
运维·数据库·mysql·云原生
一条泥憨鱼1 小时前
【Redis | 黑马点评】基于Redis的消息队列 | stream消息队列 源码解读
java·数据库·redis·缓存·lua