ODP参数enable_cached_server中的“表项”是啥

【 使用环境 】生产环境 or 测试环境

【 OB or 其他组件 】obproxy

【 使用版本 】v4.3.1;v4.3.6

【问题描述】

ODP参数enable_cached_server中的“表项”是啥

enable_cached_server 用于控制是否在没有表项时使用缓存的服务器会话。

1.这里说的“表项”是啥?

2.“服务器会话”的会话指的是谁连谁的会话,是指ODP的OBSERVER之间会话?

3.“用于控制是否在没有表项时使用缓存的服务器会话”字面意思明白,但好像缺少主语,无法理解这个参数的真实用途,是ODP的具体哪一个功能,哪一个模块在使用enable_cached_server参数?

https://www.oceanbase.com/docs/common-odp-doc-cn-1000000005053944

2 个赞

学到了。

ODP参数enable_cached_server中的“表项”指的是 ‌ODP 内部维护的、用于记录客户端会话与后端 OBServer 节点映射关系的缓存条目。 “它的的具体含义当 enable_cached_server 设置为 true 时,ODP 会在内存中为每个客户端连接(Client Session)维护一个‌路由缓存表项。它的作用:当下一个 SQL 请求到达时,ODP 会查询这个“表项”,直接将请求路由到同一个 OBServer 节点,而不是重新进行负载均衡选择。这被称为“复用上一次的会话路由”。

2 个赞

可以理解为开启缓存,是吧,或者可以理解为SQL解析中的软解析,避免硬解析,是这意思吧

看起来您说的很合理,有官方文档支撑您的说法没,有的话麻烦发一下,谢谢。

@论坛小助手

根据文档库中的信息,enable_cached_server 参数的描述确实可能让人感到困惑。基于提供的文档片段和您给出的官方链接,我将尝试解释这个参数的含义及其相关概念。

  1. “表项”是什么?

    • enable_cached_server 的上下文中,“表项”指的是 ODP 为了管理和路由请求而维护的内部数据结构中的一个条目。这里的“表”可以理解为某种映射或索引,用于快速查找特定会话或其他连接相关信息。“表项”则代表了这种映射中的单个元素。例如,在ODP中可能会有一个表(即一种数据结构)来存储所有活跃会话的信息,以便快速地进行查找和管理,那么这里提到的“没有表项”意味着在这种情况下找不到相关的会话记录。
  2. “服务器会话”的定义

    • “服务器会话”通常指客户端与OBProxy之间建立的一个连接关系。当客户端发起请求至OceanBase数据库时,通过OBProxy进行转发,期间就会形成这样的会话。这里的“服务器”更准确地说是OBProxy自身作为代理服务的角色,它与客户端建立了会话。
  3. 该参数的实际用途

    • enable_cached_server 参数决定在ODP(即OBProxy)未能找到特定会话记录的情况下,是否应该使用先前缓存下来的服务器端配置来进行响应。换句话说,如果因为某些原因导致正常流程下无法找到某个会话的相关信息(如“表项”),则依据此参数设置决定是否利用已有的缓存信息来继续处理请求,而不是直接拒绝或者返回错误。
  • 从您的描述来看,enable_cached_server 属于OBProxy (ODP) 的配置选项之一,其主要应用于OBProxy如何处理客户端请求以及如何管理这些请求背后的会话状态。具体来说,这涉及到OBProxy在面对暂时缺失部分会话信息场景下的应对策略。

综上所述,enable_cached_server 主要影响的是OBProxy在处理客户端请求时的行为逻辑,特别是在遇到会话信息不完整或丢失时,如何更加灵活高效地做出响应。希望以上解释能够帮助您更好地理解这个配置项的作用。如果有更多关于ODP配置方面的问题,请随时提问!

参考资料:

详情请参考:

  1. enable_cached_server
  2. enable_report_session_stats
  3. enable_server_ssl
  4. enable_ob_protocol_v2_with_client
  5. 查看租户会话
  6. 命令说明
  7. enable_standby
  8. OceanBase 数据库代理(ODP)
  9. 配置项总览
  10. enable_ob_protocol_v2
  1. 表项 = ODP 路由缓存中的 ObTableEntry(及分区表时的 ObPartitionEntry),存“表/分区该打到哪个 OBServer”的信息。
  2. 服务器会话 = ODP → OBServer 的后端连接;enable_cached_server 是在 缺表项或路由失败时的兜底:尽量继续用该客户端上一次连过的那个 OBServer,减少无法路由或频繁换节点的情况(仍会做 region/zone 等校验)。
1 个赞
  1. 我怎么提高 “表项”缓存的命中率,让他尽可能有缓存。

  2. 我怎么知道这个命中率是多少?

3.看起这个缓存只是路由信息,应该占用不了多少内存,能不能直接控制让他预加载全量表分区信息。彻底解决这个问题。

  1. 是否有专门的参数,控制这个“表项”缓存大小。