直连 Observer 与通过 ODP 执行 SHOW PROCESSLIST 的区别
在 OceanBase 数据库中,执行 SHOW PROCESSLIST 命令时,根据是否通过 ODP(OceanBase Database Proxy) 或直接连接到 OBServer(observer)节点,其返回结果和语义存在显著差异。以下是两者的主要区别:
1. 数据来源不同
| 连接方式 | 查询目标 | 说明 |
|---|---|---|
| 直连 OBServer(observer) | 当前 OBServer 节点的本地会话 | 使用系统视图 V$OB_PROCESSLIST,仅展示当前物理节点上的活动会话。参考文档
|
| 通过 ODP 连接 | 客户端与 ODP 之间的连接会话 |
SHOW PROCESSLIST 展示的是客户端到 ODP 的 M:N 连接映射关系中的前端连接,不直接暴露后端 OBServer 的连接细节。参考文档
|
注意:由于 OceanBase 是分布式数据库,单个租户的会话可能分布在多个 OBServer 上。因此,直连某个 observer 只能看到部分会话,而无法获得全局视角。
2. 输出内容差异
通过 ODP 执行(推荐方式)
SHOW PROCESSLIST;
-- 或获取完整信息
SHOW FULL PROCESSLIST;
-
SHOW PROCESSLIST:显示简要进程列表,字段如ID,USER,HOST,DB,COMMAND,TIME,STATE,INFO。 -
SHOW FULL PROCESSLIST:额外包含后端 OBServer 地址信息:-
IP:实际执行 SQL 的 OBServer 节点 IP -
PORT:OBServer 的 SQL 端口
-
推荐使用
SHOW FULL PROCESSLIST来了解请求被路由到了哪个 OBServer 节点。
直连 observer 执行
- 需查询内部视图
V$OB_PROCESSLIST - 仅反映本节点上的会话状态,不具备集群全局性
- 不包含 ODP 层的连接抽象信息(例如 Client Session ID)
3. 连接抽象模型不同(M:N vs 1:1)
- 直连模式(1:1):每个客户端连接对应一个 server 连接,结构简单但缺乏高可用和负载均衡能力。
- ODP 模式(M:N):多个客户端可复用少量后端连接,实现连接池、负载均衡、故障转移等高级功能。
因此,ODP 将连接关系抽象为 M:N 结构,导致
SHOW PROCESSLIST必须进行语义转换 —— 显示的是“客户端视角”的连接,而不是“服务端内部”的真实连接。
4. KILL 命令的配套使用限制
- 在 ODP 中,
KILL [connection_id]只能终止由SHOW PROCESSLIST显示出的 Client Session ID。 - 此操作会同步关闭对应的后端 OBServer 连接。
-
重要限制:SHOW PROCESSLIST和KILL命令必须发送到同一个 ODP 实例,否则无法匹配会话 ID。
在使用负载均衡(如 LVS、SLB)挂载多个 ODP 的场景下,若两次操作走不同 ODP 实例,可能导致
KILL失效。建议在这种环境中避免依赖这两个命令进行运维操作。参考文档
5. 权限控制差异
| 用户角色 | 能看到的内容 | 来源 |
|---|---|---|
ODP 超级管理员 (root@proxysys) |
所有集群租户的会话,并可 KILL 任意会话 | ODP 文档 |
| sys 租户用户 | 所有租户会话,但只能 KILL 自己租户内的会话 | 同上 |
| 普通用户 | 默认仅能查看自己用户的会话 | 同上 |
直连 observer 时权限取决于数据库自身策略,不经过 ODP 的代理权限控制层。
总结对比表
| 特性 | 直连 Observer | 通过 ODP |
|---|---|---|
| 查看范围 | 单个 OBServer 节点本地会话 | 全局租户会话(客户端视角) |
| 是否全局 |
|
|
| 包含后端节点信息 |
|
FULL PROCESSLIST 提供 IP/PORT) |
| 支持连接复用 |
|
|
KILL 命令可靠性 |
高(本地一致) | 受限于 ODP 实例一致性(需固定路径) |
| 适用场景 | 节点级诊断、调试 | 生产环境日常监控与管理 |
最佳实践建议:
- 日常运维应优先通过 ODP 执行
SHOW FULL PROCESSLIST获取完整的会话视图; - 若需排查特定 OBServer 节点性能问题,可临时直连该节点查询
V$OB_PROCESSLIST; - 在负载均衡后的多 ODP 架构中,建议启用 会话保持(Session Persistence) 或使用专用管理通道来确保
SHOW PROCESSLIST与KILL命令的一致性。
1 个赞
有道理
