如果刚接触OB,还不清楚什么是参数或者参数(parameters)跟变量(variables)分不清,
可以移步到OB社区博客有美女老师已有分享解读,详见 https://open.oceanbase.com/articles/1100275
1、参数分类
参数可以分为两类,集群参数和租户参数,重点可以关注以下字段。
- 生效作用域:scope字段
- 生效时机:edit_level字段
- 是否重启:need_reboot字段
如果对OB有所了解,修改参数时需要重点关注以上3个字段这里以作用域为例,在修改参数前我们须知哪些参数是作用于集群的,哪些参数是作用于租户的
select scope,count(*) from oceanbase.__all_virtual_sys_parameter_stat group by scope; +---------+----------+ | scope | count(*) | +---------+----------+ | CLUSTER | 286 | | TENANT | 37 | +---------+----------+ 2 rows in set (0.00 sec)
说明:
梳理参数个数的意图是随着后续OB的版本越来越多,用户使用的版本也不尽相同,建议官方能在参数描述里添加一栏,
在哪个版本引入的或者弃用的,在出新版本学习的时候能及时关注到新增或者启用的参数。
2、参数的查询
使用show parameters [...] 以下给出几种示例:
show parameters like '%dir%'; show parameters like 'mysql_port'; show parameters where name like 'mysql_port'; show parameters where name in ('mysql_port','rpc_port'); show parameters like 'sql_area_size' tenant='test_tenant_1';
总之针对参数的查询方式很灵活,快来根据自己的喜好(需要)查询了解一下自己环境的参数吧。
3、参数的修改
修改参数其实我们不光需要知道是何级别的(集群/租户),还需要知道是如何生效的,是否需要重启,可以重点关注:
具体的修改方式可以参考官方文档:
show parameters; 或者 select name,value,need_reboot,scope,edit_level from oceanbase.__all_virtual_sys_parameter_stat ; 有几个重要的字段 need_reboot:表示修改参数后是否需要重启才能生效。 scope:表示参数是集群的还是租户的作用域。 edit_level:表示参数是否允许修改,若允许修改修改后是及时生效还是需要重启才能生效, READONLY:只读参数不允许修改; STATIC_EFFECTIVE: 可以修改,单需要重启才能生效,类似于Oracle修改参数的scope=spfile; DYNAMIC_EFFECTIVE: 可以修改,且动态生效,类似于Oracle修改参数的scope=both。
说明:
- 1、如果我们修改了一个集群的参数,修改后会记录到oceanbase.__all_sys_parameter 系统内部表,可以大概知道集群的参数哪些是非默认的。
- 2、如果我们修改了一个租户的参数,修改后会记录到oceanbase.__tenant_parameter 系统内部表,可以大概知道租户的参数哪些是非默认的。
- 3、sys租户可以修改集群参数和租户参数,修改时还可以指定zone或者server来修改对应的。
- 4、普通租户只能修改租户自己的参数,修改时可以指定zone或者server来修改对应的,且仅支持指定一个zone或者一个server。
- 5、以上1,2中之所以说大概知道是由于从输出中看一些内部隐藏的参数也会输出,而这些本身也没有做任何修改。
4、参数持久化
修改了参数,重启后参数还在吗,OB会对参数做了持久化(内部表持久化和参数文件持久化),其中参数文件持久化的路径默认是在OB的home_path
对应的目录下etc/etc2/etc3,这里三个路径说明参数文件非常重要,可以修改到不同的磁盘文件系统下,做多路径保存。
MySQL [oceanbase]> select name,value,info from __all_virtual_sys_parameter_stat where name in ('config_additional_dir','data_dir') ; +-----------------------+-----------------------------+------------------------------------------+ | name | value | info | +-----------------------+-----------------------------+------------------------------------------+ | config_additional_dir | etc2;etc3 | additional directories of configure file | | data_dir | /home/data/observer01/store | the directory for the data file | +-----------------------+-----------------------------+------------------------------------------+ 2 rows in set (0.003 sec) [admin@test62 observer01]$ pwd /home/data/observer01 [admin@test62 observer01]$ tree etc* etc ├── observer.config.bin └── observer.config.bin.history etc2 ├── observer.conf.bin └── observer.conf.bin.history etc3 ├── observer.conf.bin └── observer.conf.bin.history 0 directories, 6 files
说明:
- 1.参数文件是二进制文件,不能直接vim或者cat等命令查看/修改,可以使用strings命令查看对应的参数文件。
- 2.对于一个已运行的OB节点,重启的时候如果没有指定参数,则读取参数文件的配置,
- 如果在启动的命令行指定参数,这指定的这些参数优先级高于参数文件中的, 注意:obd部署的环境
- 如果直接使用alter system 方式修改,不能将参数持久化到observer.conf.bin中。
- 如果是在yaml文件中修改的,是可以持久化下来的。
- 3.observer.conf.bin是最新的参数对应的文件,observer.conf.bin.history是最新的参数修改前对应的文件。
- 4.文件内容【tenant_id】下是对应租户的参数,其他是集群的参数。
- 5.默认各个OB节点对应的etc/etc2/etc3的参数文件内容都是相同的,除非修改的时候指定zone或者server。
5、内部参数
有些参数直接使用show parameters查询不到,但又真正存在,这里暂且称之为内部参数或者隐藏的参数,这类参数命名特点是以下划线开始。
select name,value,scope from __all_virtual_sys_parameter_stat where regexp_like(name,'^_.*');
说明:此类参数平时很少使用,修改前最好跟官方确认一下有无必要或者影响。