基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
备集群读服务
更新时间:2023-08-25 18:30:59
本节主要介绍备集群读服务的概念及使用方法。
概述
备集群各个分区的全功能型副本或者只读副本会实时回放 REDO 日志,并且能够承载读服务。OceanBase 数据库支持单分区读和跨分区一致性读,始终保证读取结果是一个快照,从而保证事务的一致性。
由于不同分区以及不同副本的回放进度不同,默认情况下,可能导致先后两次读取的数据版本出现回退的情况。因此,OceanBase 数据库提供了单调读开关。开启单调读开关后,内部会维护租户级别单调递增的可读版本号,每次读取时都会获取全局最新的可读版本号作为快照版本,保证读取的数据越来越新,不会回退。
同时,OceanBase 数据库支持有界旧(Bounded Staleness)一致性读,保证读取的数据不会落后于主集群最新数据的特定时间,默认为 5 秒。如果备集群落后超过阈值,则读操作会重试等待,直到超时或者备集群追上。
在用户侧配置备集群的弱一致性读
备集群的普通租户仅支持弱一致性读,如果发起强一致性读、写或者 DDL 操作,则会报错。
可以通过以下两种方式来指定备集群的弱一致性读:
登录备集群的普通租户,将 Session 变量
ob_read_consistency的值设置为WEAKobclient> SET ob_read_consistency = WEAK;更多 Session 变量
ob_read_consistency的说明信息请参见 ob_read_consistency。注意
全局系统变量
ob_read_consistency不能在备集群上设置,只能在主集群上设置。该设置仅影响当前 Session,设置后,当前 Session 中后续的读默认都是弱一致性读。
在 SQL 语句中指定 Hint
如下所示,指定
WEAK Consistency,优先级高于ob_read_consistency。obclient> SELECT /*+READ_CONSISTENCY(WEAK) */ * FROM t1;
在租户侧配置备集群读服务
在用户侧配置备集群的弱一致性读后,如果需要进一步控制备集群的弱一致性读服务,您还需要在租户侧对备集群的读服务进行配置。
Oceanbase 数据库中主要通过以下两个租户级配置项来控制弱一致性读服务:
enable_monotonic_weak_read:单调读开关,默认为 True。更多配置项
enable_monotonic_weak_read的说明信息请参见 enable_monotonic_weak_read。max_stale_time_for_weak_consistency:有界旧一致性读配置项,表示弱一致性读取的数据不会落后于指定时间的数据,默认值为 5 秒。更多配置项
max_stale_time_for_weak_consistency的说明信息请参见 max_stale_time_for_weak_consistency。
设置方法如下:
登录备集群的系统租户,调整特定租户或者所有租户的配置项。
为所有租户或者特定租户开启单调读
obclient> ALTER SYSTEM SET enable_monotonic_weak_read = true TENANT = [ALL|name];为所有租户或者特定租户设置有界旧一致性读
obclient> ALTER SYSTEM SET max_stale_time_for_weak_consistency = '10s' TENANT = [ALL|name];