obproxy_read_consistency配置项和会话设置ob_read_consistency的区别?

obproxy_read_consistency配置项和会话设置ob_read_consistency的区别,通常使用那个多一点

2 个赞

通常情况下,‌更推荐使用 ob_read_consistency 会话变量‌,原因如下:

  1. 控制粒度更精细‌:可以针对不同的业务场景(如事务内强读、只读查询弱读)进行灵活配置,避免全局弱读可能带来的数据一致性风险。
  2. 符合事务语义‌:OceanBase 的读一致性是基于事务的,事务内的第一条语句决定整个事务的一致性级别。使用 ob_read_consistency 可以更好地与应用事务逻辑配合。
  3. 安全性更高‌:避免了 obproxy_read_consistency 全局设置可能导致的意外弱读,尤其是在混合读写负载的场景下。

obproxy_read_consistency 适用于那些希望‌零代码改造‌、统一将所有读请求路由到副本以提升读性能的场景,但需要评估数据一致性要求是否允许。

1 个赞

感谢分享

@论坛小助手

obproxy_read_consistency配置项和会话设置ob_read_consistency的主要区别在于它们的作用范围以及配置方式。

  1. 作用范围

    • obproxy_read_consistency 是 OBProxy 的配置项,用于全局设置 SQL 请求的读一致性级别。所有通过此 OBProxy 发起的 SQL 请求都会遵循该配置项设置的一致性级别。
    • ob_read_consistency 是会话级别的变量,用于设置当前会话的读一致性级别。它只会影响当前会话中的 SQL 请求。
  2. 配置方式

    • obproxy_read_consistency 需要通过 OBProxy 管理员账号登录数据库并执行 SQL 语句来修改,例如:
      alter proxyconfig set obproxy_read_consistency = 1;
      
    • ob_read_consistency 可以通过会话设置来修改,例如:
      set ob_read_consistency = 'weak';
      

通常使用哪个更多

  • 如果希望所有通过某个 OBProxy 实例发起的 SQL 请求都遵循相同的读一致性级别,通常会使用 obproxy_read_consistency 配置项。
  • 如果希望某个特定会话中的 SQL 请求有不同的读一致性级别,通常会使用 ob_read_consistency 会话变量。

总结

  • obproxy_read_consistency 更适合全局配置,适用于大多数场景。
  • ob_read_consistency 更适合临时调整某个会话的一致性级别,适用于特定需求。

具体信息可参考以下文档:

  1. obproxy_read_consistency
  2. 读写分离
  3. 如何路由到只读型副本查询数据
  4. 弱一致性读