OceanBase 数据库的配置项分为集群级配置项和租户级配置项。OBServer 会将所有的配置项序列化后保存到工作目录下的配置文件 etc/observer.conf.bin 中,之后在这个工作目录下启动 OBServer 都会读取这个配置文件。
配置项查询
普通租户查询配置项,通过虚拟表的形式展示当前租户的配置项信息,包含集群配置和租户配置。其中集群级配置项都是只读的,租户级配置项根据配置项属性决定是否可以被修改。
普通租户使用
SHOW PARAMETERS语句查看本租户级配置项信息的 SQL 语句如下:SHOW PARAMETERS [SHOW_PARAM_OPTS]系统租户查询配置项
系统租户可以使用
SHOW PARAMETERS语句查看集群级配置项和租户级配置项信息。并可通过增加TENANT关键字信息查看指定租户的配置项。如果没有指定
TENANT,则展示系统租户级配置项信息,包含集群配置和租户配置。集群配置和租户配置都根据其属性决定是否可以被修改。如果指定为某个普通租户,则和普通租户展示的配置项内容完全一致。
SQL 语句如下:
SHOW PARAMETERS [SHOW_PARAM_OPTS] TENANT = tenant_name
配置项的详细信息如下表所示:
| 列名 | 含义 |
|---|---|
| svr_ip | 机器 IP |
| svr_port | 机器端端口 |
| name | 配置项名 |
| value | 配置项值 |
| type | 配置项数据类型 ( NUMBER,STRING,CAPACITY... ) |
| info | 配置项解释 |
| section | 配置项分类 |
| scope | 配置项范围属性( Tenant|Cluster ) |
| source | 当前值来源( Tenant|Cluster|CommandLine|ObAdmin|File ) |
| editable | 是否可修改 |
| dynamic | 是否支持在线动态修改 |
配置项修改
说明
集群级配置项仅支持在系统租户下配置。
MySQL 模式下,修改配置项的 SQL 语法如下:
ALTER SYSTEM [SET] parameter_name = expression [PARAM_OPTS]
系统租户下,可以通过指定 TENANT 关键字来修改全部或指定租户的配置项。SQL 语法如下:
ALTER SYSTEM [SET] parameter_name = expression [PARAM_OPTS] TENANT = all|tenant_name
说明
执行成功以后,所有被指定的租户的配置项均会被修改。
Oracle 模式下,修改配置项的 SQL 语法如下:
ALTER SYSTEM SET parameter_name = expression [PARAM_OPTS]
说明
PARAM_OPTS表示设置配置项所使用的其它限定条件,比如:指定 Zone、指定 OBServer 等。
配置项存储
OBServer 持久化使用配置文件,运行时则在会维护内部表。
配置项有两种实体表:集群级配置项表和每个租户的租户级配置项表。当用户执行 SQL 修改配置项时修改集群级配置项时就写入集群级配置项表,否则写入对应的租户级配置项表。读取时,集群级配置项只需要使用集群级配置项表,租户级配置项则需要读取租户级配置项表。
配置文件格式
ObRecordHeader
[CLUSTER]
CLUSTER_PARAMETER_UPDATES
[TENANT_ID1]
TENANT_ID1_PARAMETER_UPDATES
[TENANT_ID2]
TENANT_ID2_PARAMETER_UPDATES
更新
更新是指各个 OBServer 根据需要,从内部表或者配置文件读取持久化的增量修改加载到内存中的过程。当 OBServer 进程刚启动的时候,它会从配置文件中加载配置项;正常运行过程中如果用户主动修改了配置项,OBServer 则会从内部表中进行加载。
从配置文件中加载
OBServer 启动的时候配置项会优先在配置文件中进行加载。加载配置项的顺序是:
根据代码内容和运行环境计算出默认配置。
使用配置文件中的配置逐项设置。
租户级配置项是从集群级配置项克隆一份后再使用租户配置值进行覆盖。
根据命令行参数传入的配置项值进行设置。
从内部表加载
配置项最主要的更新场景还是从内部表进行加载,也就是当前已经拥有一份可正常运行的配置项的同时,需要修改某些配置项的值。
当一条 ALTER SYSTEM SET 的 SQL 通过验证以后,对应配置项所在的内部表会进行更新,并且 RS 会通过心跳的方式通知各 OBServer 需要重新读取配置项内部表以更新它们的配置项。当 OBServer 收到 RS 的通知以后,后台线程会启动一个"更新配置项"的任务。该任务主要流程是:
读取内部表中的配置项值。
克隆一份当前配置项。
将内部表中的配置项逐项应用到克隆出来的配置项副本中。
结束后检查副本配置项的值是否合法。
将内部表值持久化到配置文件。
使用配置项副本代替原来配置项。
租户级配置项的流程和集群级配置项一致,唯一的区别是配置项所在的内部表不同。




