2026.07.24 单选题 求点赞

当 OBProxy 路由表中的 Partition 信息过期,导致 SQL 被路由到错误的 OBServer 时,会发生什么?
A. 直接报错 Partition Not Found
B. 自动重试,转发到正确节点并刷新路由表
C. 等待 60秒 后自动刷新路由表
D. 强制关闭当前会话

2 个赞

答案:B. 自动重试,转发到正确节点并刷新路由表

OBProxy 的路由缓存刷新机制是一个被动触发 + 自动重试的过程,具体流程如下:

1. SQL 被路由到错误的 OBServer OBProxy 使用本地缓存的路由信息将 SQL 转发给某个 OBServer 节点,但该节点实际上并不持有目标分区的主副本(缓存已过期)。

2. OBServer 回包反馈路由不准 OBServer 发现该 SQL 不能在本地执行时,会在回包中通过 is_partition_hit 字段反馈给 OBProxy,告知路由不命中。

3. OBProxy 标记缓存为 DIRTY 并重试 OBProxy 收到反馈后,将缓存状态从 AVAIL 改为 DIRTY,然后自动重试,将请求转发到正确的 OBServer 节点。同时触发缓存刷新,重新从 sys 租户查询最新的分区路由信息。

官方描述:「ODP 每次会把 SQL 根据路由表转发给相应的 OBServer 节点,当 OBServer 发现该 SQL 不能在本地执行时,会在回包时反馈给 ODP」——OBProxy 路由缓存机制

排除其他选项:

  • :x: A. 直接报错 Partition Not Found:OBProxy 有重试机制,不会直接报错。OBServer 通过 is_partition_hit 反馈而非报错。
  • :x: C. 等待 60 秒后自动刷新:缓存刷新是被动触发的(由 OBServer 回包反馈驱动),而非固定时间间隔。sys 租户路由信息是 15 秒定期刷新,但分区级路由是按需刷新。
  • :x: D. 强制关闭当前会话:路由不准不会导致断连,OBProxy 会透明重试。

来源:

1 个赞