Tank
#1
【 使用环境 】测试环境
【 OB or 其他组件 】ODP、OB
【 使用版本 】4.3.5
【问题描述】目前正在考虑一个架构设计问题,在使用读写分离情况下,对于一些读敏感的问题,OB 是否有阈值来控制?比如读延迟 30ms 可接受,超过 30ms 均默认走主。
补充,应为目前业务代码不想做修改,所以不考虑强主设置。
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
4 个赞
论坛小助手
#4
您的问题与 OceanBase 的读写分离策略有关,特别是针对 ODP (OceanBase Data Proxy) 如何设置读请求的延迟阈值。ODP 是 OceanBase 提供的一个代理服务,用于实现读写分离、负载均衡等功能。但是,根据当前提供的 obdiag 使用场景来看,obdiag 主要是用来做日志收集和根因分析的工具,并不适合解决您的配置问题。
针对您提出的需求,可以通过配置 ODP 来实现读写分离的延迟阈值控制。这通常涉及到调整 ODP 的配置参数,如 read_split_threshold(该参数控制读取操作在从库上执行的最大延迟时间)。具体的配置方法可能会根据您的 ODP 版本有所不同,请参考您所使用的 ODP 版本的手册或官方文档。
尽管 obdiag 不适用于解决您的问题,但如果您在配置 ODP 后遇到了特定的技术障碍或异常情况,例如读写分离没有按照预期工作,您可以考虑使用 obdiag 进行日志收集,以帮助我们更准确地定位问题。例如,如果读请求没有按照预期转向主库,可以使用以下命令收集相关信息:
日志采集场景: [SQL执行出错]
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”
请您提供一些额外的信息,以便我们能够更好地帮助您解决问题:
- 您当前使用的 ODP 具体版本是什么?
- 您是否已经尝试过设置
read_split_threshold 参数?如果尝试过了,设置了什么值?
- 您遇到的具体问题表现是什么?例如,是否有任何错误消息或警告信息?
- 您能否提供一个简单的测试用例来复现您遇到的问题?
这些信息将有助于我们更精确地了解您的情况并提供针对性的解决方案。
附上敏捷诊断工具 obdiag 使用帮助链接
3 个赞
论坛小助手
#5
在使用读写分离的情况下,OceanBase 提供了参数 ob_max_read_stale_time 来控制弱读请求的最大延迟时间,单位为微秒。默认值为 -1,表示该功能处于默认关闭状态。如果希望设置一个具体的阈值,比如 30ms(30000 微秒),可以通过以下 SQL 命令设置该参数来实现您的需求:
SET GLOBAL ob_max_read_stale_time = 30000;
此参数设置后,对于超过 30ms 延迟的弱读请求,ODP 会将这些请求重新路由至主副本,确保读取的数据不会过于陈旧。此外,ob_max_read_stale_time 不能低于 OceanBase 数据库的弱一致性读版本号的刷新周期 weak_read_version_refresh_interval,默认值为 100ms(100000 微秒)。需要注意的是,此配置无需重启 ODP 即可生效。
详情请参考:
- 备副本延迟阈值
- ob_max_read_stale_time
2 个赞