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

相关推荐
wenha1 分钟前
数据库隔离级别
数据库·mysql·sqlserver·隔离级别
2401_871492858 分钟前
Layui如何修改Layui默认的UI主题颜色(换肤功能实现)
jvm·数据库·python
Edward1111111135 分钟前
4.27mysql ,数据库,数据源
数据库·mysql
小徐敲java36 分钟前
踩坑实录:MySQL8.0 导入SQL报错 2006 - MySQL server has gone away 完美解决
数据库·sql
别来无恙blwy1 小时前
windows MongoDB升级-自动升级脚本-自动检测升级到任意版本
数据库·windows·mongodb
步辞1 小时前
Redis如何利用LFU算法优化缓存命中率
jvm·数据库·python
~小先生~1 小时前
sqlserver 外键、级联使用
数据库·sqlserver
forEverPlume1 小时前
golang如何实现日志按级别过滤_golang日志按级别过滤实现教程
jvm·数据库·python
m0_624578592 小时前
MySQL主从复制支持跨版本吗_不同版本间同步的注意事项
jvm·数据库·python
2401_871492853 小时前
如何在 React Router v6 中正确配置多路由组件显示
jvm·数据库·python