A. Location Cache 仅缓存分区副本所在的 OBServer 节点信息,不缓存 Leader 的位置,Leader 信息通过每次请求实时获取。
B. 当 ODP 或 OBServer 收到 SQL 请求时,首先查询本地 Location Cache 获取目标分区的 Leader 位置;如果缓存缺失或失效,则会向 Root Service 发起远程请求获取最新位置信息并更新缓存。
C. Location Cache 的更新是实时的,一旦集群中发生 Leader 切换或副本迁移,所有节点的 Location Cache 会在毫秒级内自动同步,无需主动失效。
D. 用户可以通过 ALTER SYSTEM FLUSH LOCATION CACHE 命令手动清空指定租户的 Location Cache,该操作会短暂阻塞该租户的所有请求。
3 个赞
解析 :
OceanBase 中,ODP 和 OBServer 都维护了 Location Cache,用于缓存分区的副本分布及 Leader 位置。当需要路由请求时,首先查找本地缓存;如果缓存未命中或缓存条目已过期(如心跳发现节点异常),系统会向 Root Service 发送 GET_LOCATION 请求拉取最新的位置信息,并更新到本地缓存中。这种设计减少了对 Root Service 的频繁访问,提升了路由效率。
-
A 错误 :Location Cache 既缓存副本分布,也缓存 Leader 位置 ,两者都是路由的关键信息。
-
B 正确 :描述符合 Location Cache 的工作流程。
-
C 错误 :Location Cache 的更新是被动且最终一致 的。Leader 切换后,需要通过查询失败(如收到
not master 错误)或定期心跳来触发刷新,并非毫秒级实时自动同步。
-
D 错误 :
ALTER SYSTEM FLUSH LOCATION CACHE 确实可以手动清空缓存,但不会阻塞租户请求 。清空后,后续请求会重新从 Root Service 获取位置,可能短暂增加延迟,但不会阻塞。
6 个赞