就问下方法一、二什么区别啊

直连 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 的连接细节。参考文档

:warning: 注意:由于 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 端口

:white_check_mark: 推荐使用 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 连接。
  • :warning: 重要限制SHOW PROCESSLISTKILL 命令必须发送到同一个 ODP 实例,否则无法匹配会话 ID。

在使用负载均衡(如 LVS、SLB)挂载多个 ODP 的场景下,若两次操作走不同 ODP 实例,可能导致 KILL 失效。建议在这种环境中避免依赖这两个命令进行运维操作。参考文档

5. 权限控制差异

用户角色 能看到的内容 来源
ODP 超级管理员 (root@proxysys) 所有集群租户的会话,并可 KILL 任意会话 ODP 文档
sys 租户用户 所有租户会话,但只能 KILL 自己租户内的会话 同上
普通用户 默认仅能查看自己用户的会话 同上

直连 observer 时权限取决于数据库自身策略,不经过 ODP 的代理权限控制层。

总结对比表

特性 直连 Observer 通过 ODP
查看范围 单个 OBServer 节点本地会话 全局租户会话(客户端视角)
是否全局 :x: :white_check_mark: 是(经由 ODP 汇总)
包含后端节点信息 :x: 否(除非手动关联) :white_check_mark: 是(FULL PROCESSLIST 提供 IP/PORT)
支持连接复用 :x: :white_check_mark: 是(M:N 连接池)
KILL 命令可靠性 高(本地一致) 受限于 ODP 实例一致性(需固定路径)
适用场景 节点级诊断、调试 生产环境日常监控与管理

:white_check_mark: 最佳实践建议

  • 日常运维应优先通过 ODP 执行 SHOW FULL PROCESSLIST 获取完整的会话视图;
  • 若需排查特定 OBServer 节点性能问题,可临时直连该节点查询 V$OB_PROCESSLIST
  • 在负载均衡后的多 ODP 架构中,建议启用 会话保持(Session Persistence) 或使用专用管理通道来确保 SHOW PROCESSLISTKILL 命令的一致性。
1 个赞

有道理