跳转到主要内容

KINGBASEES · 命令行诊断

kbdiag 给结论、给证据、给下一步

面向 KingbaseES 的命令行诊断工具。单个静态二进制,对运行中的实例做一次只读查询,告诉你发现了什么、依据是什么、下一步该跑哪条命令。

从一个问题开始

这是个什么实例?有没有卡住的?

以下是命令使用示例,不是现场执行结果。先编译二进制并拷到数据库主机。

这是个什么实例?有没有卡住的?
# 1. 这是个什么实例,连接快满了吗?
~/kbdiag status

# 2. 有没有人在等锁,被谁挡住?
~/kbdiag locks

# 3. 顺着 finding 的 verify 行往下看
~/kbdiag session <pid>

按问题找到入口

七条命令,回答六类问题

实例概况

版本、角色、运行时长、各库大小;连接快满时 WARN/FAIL。

实例概况

会话

谁连着、谁 idle in transaction,以及单个会话在干什么。

会话

锁

谁在等锁,被哪个会话直接挡住。

锁

事务

开了太久的事务,以及被遗忘的两阶段事务。

事务

复制槽

未激活的槽:一直保留 WAL、压着清理视界。

复制槽

看 · 查 · 顺藤摸瓜

每条 finding 都告诉你下一步看哪里

01 / 看

先拿到事实

  • 实例连得上吗?是什么角色?连接快满了吗?
  • 退出码就是结论:0 OK,1 WARN,2 FAIL,3 UNKNOWN。
kbdiag
~/kbdiag status
echo $?

02 / 查

单个维度深查

  • 会话、锁、事务、等待、复制槽各有一条命令。
  • 判定覆盖全部行,–limit 只影响显示。
kbdiag
~/kbdiag sessions
~/kbdiag locks
~/kbdiag txn

03 / 顺藤摸瓜

照 verify 行继续

  • 每条 finding 都打印下一步要跑的命令,比如去看挡路的会话。
  • 建议的处理语句只打印,不执行。
kbdiag
verify: kbdiag session 435308

开始之前

数据库主机上要装什么?

只要这一个二进制。它自己实现线协议,不需要 ksql 或任何运行时;以 kingbase OS 用户走本地 socket 连接即可。

它会改我的数据库吗?

不会。每个连接都是只读事务并设了 lock_timeout。ROLLBACK PREPARED 之类的处理语句只打印出来让你判断,从不执行。

原来的 shell 版呢?

kbdiag 2.0 是 Go 重写版,首个版本覆盖会话、锁、事务、等待、实例概况和复制槽。shell 版(v1.x)已冻结,需要它的其他命令请用 v1.0.0。

开始第一次检查编译静态二进制,拷到 KingbaseES V8R6 主机,从 status 和 sessions 开始。