status:实例概况 这是个什么实例、基本面是否正常:角色、复制、连接数、各库大小、磁盘。
采集于 2026-09-27(UTC+08),本地 KingbaseES V008R006C009B0014 主节点和备节点,数据库 test。工具是 Go 版源码提交 93bf65d 编译的 ~/kbdiag(linux/amd64 静态二进制)。这是测试环境实测,不代表生产环境验收。FAIL 的例子由故障注入脚本造出来,它把普通用户可用的连接全部占满。数值只属于本次采样。
用法 status 没有自己的参数。连接参数和 sessions 相同。
只判两件事:
FAIL :普通用户可用的连接(max_connections 减去 superuser_reserved_connections)全部占满,业务已经连不上。WARN :备库没在收 WAL,即没有 WAL 接收进程,或者它的状态不是 streaming。这时查询还能跑,但主库一旦挂掉,没有能接管的最新备库。不报"连接快满"。连接多到什么程度算多,要看应用,所以 status 只给出数字,由你判断。
在主库上
~/kbdiag status
echo EXIT_CODE = $?
status OK (KingbaseES V008R006C009B0014, primary, system@local, 2026-09-27T13:34:42+08:00)
inst.info
version V008R006C009B0014
data_directory /home/kingbase/cluster/install/kingbase/data
port 54321
start_time 2026-09-20 22:19:13 (up 6d 15h)
connections 5 / 97 (max_connections 100 - superuser_reserved 3)
inst.downstreams: 1
name address state sync
node2 192.168.105.11 streaming quorum
inst.upstream: not_applicable (primary)
inst.databases: 5, total 382 MB
test 325 MB
esrep 15 MB
mydb 14 MB
kingbase 14 MB
security 14 MB
inst.disk (filesystem of data_directory)
used 14 GB / 199 GB (7%)
free 185 GB
EXIT_CODE=0 第一行的角色(primary / standby)来自 sys_is_in_recovery()。 inst.info:connections 只数连到某个库的后端,不含后台进程,可以直接和普通用户可用的 97 个比。inst.downstreams:本实例给哪些备库发 WAL,一个备库一行,数据来自 sys_stat_replication。sync 照数据库原样显示,repmgr 下这里是 quorum,不是 sync / async。inst.upstream 只对备库适用。inst.databases:非模板库,从大到小排。大小按 1024 进位,和 pg_size_pretty 一致。inst.disk:data_directory 所在的文件系统,口径和 df 一样。已用加可用小于总量,差的是给 root 预留的块。只展示,不参与判定。在备库上
~/kbdiag status
echo EXIT_CODE = $?
status OK (KingbaseES V008R006C009B0014, standby, system@local, 2026-09-27T13:37:22+08:00)
inst.info
version V008R006C009B0014
data_directory /home/kingbase/cluster/install/kingbase/data
port 54321
start_time 2026-09-23 15:44:58 (up 3d 21h)
connections 5 / 97 (max_connections 100 - superuser_reserved 3)
inst.upstream
status streaming
upstream 192.168.105.10:54321
slot repmgr_slot_2
last_msg 11s ago
inst.downstreams: 0
inst.databases: 5, total 382 MB
test 325 MB
esrep 15 MB
kingbase 14 MB
mydb 14 MB
security 14 MB
inst.disk (filesystem of data_directory)
used 12 GB / 199 GB (6%)
free 187 GB
EXIT_CODE=0 备库上游排在前面,数据来自 sys_stat_wal_receiver:从哪里收 WAL、走哪个槽、最后一条消息是多久前。 last_msg 只展示,不判。主库空闲时每 wal_receiver_status_interval(默认 10 秒)才发一条,几秒是正常值。WAL 接收进程被暂停时(比如被 SIGSTOP),状态仍然是 streaming,status 不会报。如果 last_msg 一直在涨,请自己去备库上看 WAL 接收进程。slots 页有这种情况的实采。 连接全部占满
~/kbdiag status
echo EXIT_CODE = $?
status FAIL (KingbaseES V008R006C009B0014, primary, system@local, 2026-09-27T13:38:16+08:00)
[FAIL] inst.connections 98 connections in use, reaching the 97 ordinary users may open (max_connections 100 minus 3 reserved for superusers): ordinary users can no longer connect
verify: kbdiag sessions # who holds the connections: the summary at the top counts them by user, database, application and client
inst.info
version V008R006C009B0014
data_directory /home/kingbase/cluster/install/kingbase/data
port 54321
start_time 2026-09-20 22:19:13 (up 6d 15h)
connections 98 / 97 (max_connections 100 - superuser_reserved 3)
inst.downstreams: 1
name address state sync
node2 192.168.105.11 streaming quorum
inst.upstream: not_applicable (primary)
inst.databases: 5, total 382 MB
test 325 MB
esrep 15 MB
mydb 14 MB
kingbase 14 MB
security 14 MB
inst.disk (filesystem of data_directory)
used 14 GB / 199 GB (7%)
free 185 GB
EXIT_CODE=2 已用 98 个,超过了 97,因为超级用户还能从保留的连接里进来,kbdiag 自己用的 system 连接也在其中。 verify 行指向 sessions ,它的汇总按用户、库、应用、客户端给连接计数。这次采样 里能看到 kbdiag_ro 从 127.0.0.1 连进来 93 个 idle 会话。备库没在收 WAL 这种情况还没在测试环境里造出来,下面的 finding 是从源码里摘的文字,不是实采。备库没有 WAL 接收进程时,status 报:
[WARN] inst.upstream the standby has no WAL receiver and is not receiving WAL from the primary: if the primary fails now, no standby can take over
verify: kbdiag slots # run on the primary: is this standby's slot inactive? 有接收进程但状态不是 streaming 时,finding 里写的是那个状态。退出码是 1。
走 TCP 时 只有确定跑在数据库主机上,kbdiag 才读 inst.disk,即满足下面一条:
走 Unix socket; --host 是 localhost / 127.0.0.1 / ::1,并且 data_directory 在本机存在。要核对目录,是因为端口可能被转发到别的机器。否则 inst.disk 是 not_applicable。下面用 kbdiag_ro 连主库自己的网络地址:
PGPASSWORD = ... ~/kbdiag status --host 192.168.105.10 -U kbdiag_ro
echo EXIT_CODE = $?
status OK (KingbaseES V008R006C009B0014, primary, kbdiag_ro@remote, 2026-09-27T13:40:08+08:00)
inst.info
version V008R006C009B0014
data_directory /home/kingbase/cluster/install/kingbase/data
port 54321
start_time 2026-09-20 22:19:13 (up 6d 15h)
connections 5 / 97 (max_connections 100 - superuser_reserved 3)
inst.downstreams: 1
name address state sync
node2 192.168.105.11 streaming quorum
inst.upstream: not_applicable (primary)
inst.databases: 5, total 382 MB
test 325 MB
esrep 15 MB
mydb 14 MB
kingbase 14 MB
security 14 MB
inst.disk: not_applicable (remote connection)
EXIT_CODE=0 not_applicable 不影响结论。
权限不足时 kbdiag_ro 没有任何监控角色,但在 KingbaseES V8R6 上它照样能完整看到 sys_stat_replication、sys_stat_wal_receiver 和 data_directory,所以 status 给它的结果和 system 一样。能被挡住的只有库大小:对某个库没有 CONNECT 权限时,那个库的大小为空,并记进 redacted。库大小不参与判定,所以结论仍然是 OK,不是 UNKNOWN。
JSON --json 保留原始值:大小是字节,时长是秒,版本是短版本号。inst.info 多一个 usable_connections,inst.disk 是 total_bytes、used_bytes、avail_bytes。不适用的 probe 是 "status": "not_applicable",并带原因,比如 "primary" 或 "remote connection"。
退出码 返回使用手册