READ_CONSISTENCY(WEAK)这个hint的具体含义

【产品名称】ob

【产品版本】

【问题描述】

  1. READ_CONSISTENCY(WEAK)这个hint的具体含义
  2. 最大安全可读的版本号这个版本号是跟最新版本相差多久?有时候开了这个选项返回会更慢
  1. 这个是弱读的hint  

       一致性读

OceanBase 数据库支持两种类型的读请求,强一致性读和弱一致性读。强一致性读要求根据快照信息读取 leader 上的数据;弱一致性读允许读取某一个稍旧的版本的数据。

强一致性读

跨机查询的语句,需要获取全局一致的快照,否则无法保证强读的一致性。因此该情况下,需要确保 GTS 是打开的。

单机的查询,理论上不需要依赖 GTS,通过获取待读分区的最大已经提交的版本号,取其最大值作为读快照,就能保证强读的一致性。

弱一致性读

用户使用弱读的功能,有两种方法:

查询语句添加 hint

Select /*+read_consistency(weak)*/ * from test where c1=1;

设置系统变量

Session 级别设置:

set @@ob_read_consistency=2,其中1=FROZEN、2=WEAK、3=STRONG;

用户级别设置:

set global ob_read_consistency=2;

OceanBase 数据库维护了一个租户级别最大安全可读的版本号,弱读语句快照由该版本号决定。非 RC 隔离级别的弱读没有意义,因此 OceanBase 数据库只在 RC 隔离级别下支持弱读。

下文讨论的并发控制,没有特殊说明,均指的是强一致性读。

2   弱一致性读,也是要求保持因果一致性的,所以可能会存在重试的情况, 弱一致性读的优势是可以利用备机节点做读取操作分担一些压力。