obproxy_read_consistency配置项和会话设置ob_read_consistency的区别,通常使用那个多一点
2 个赞
通常情况下,更推荐使用 ob_read_consistency 会话变量,原因如下:
- 控制粒度更精细:可以针对不同的业务场景(如事务内强读、只读查询弱读)进行灵活配置,避免全局弱读可能带来的数据一致性风险。
- 符合事务语义:OceanBase 的读一致性是基于事务的,事务内的第一条语句决定整个事务的一致性级别。使用
ob_read_consistency可以更好地与应用事务逻辑配合。 - 安全性更高:避免了
obproxy_read_consistency全局设置可能导致的意外弱读,尤其是在混合读写负载的场景下。
obproxy_read_consistency 适用于那些希望零代码改造、统一将所有读请求路由到副本以提升读性能的场景,但需要评估数据一致性要求是否允许。
1 个赞
感谢分享
obproxy_read_consistency配置项和会话设置ob_read_consistency的主要区别在于它们的作用范围以及配置方式。
-
作用范围:
-
obproxy_read_consistency是 OBProxy 的配置项,用于全局设置 SQL 请求的读一致性级别。所有通过此 OBProxy 发起的 SQL 请求都会遵循该配置项设置的一致性级别。 -
ob_read_consistency是会话级别的变量,用于设置当前会话的读一致性级别。它只会影响当前会话中的 SQL 请求。
-
-
配置方式:
-
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更适合临时调整某个会话的一致性级别,适用于特定需求。
具体信息可参考以下文档:
- obproxy_read_consistency
- 读写分离
- 如何路由到只读型副本查询数据
- 弱一致性读