上次,咱们已经学习搭建了一套 OceanBase 的测试环境:内存不足,如何安装一个社区版OceanBase数据库?
这次就来看看,OceanBase 的参数与变量与其他数据库有什么不一样。
首先说说参数和变量的区别。参数(parameter)是 ORACLE 的叫法,变量(variable)是 MySQL 的叫法,在 OceanBase 里这两种概念和修改方法都存在,跟 ORACLE 和 MySQL 基本保持一致。
通常集群级别的设置用参数,租户级别的设置用变量。参数查看方式是 show parameters,变量查看方式是 show [global|session] variables 。在参数或变量的定义中,有初步的涵义说明。
虽然 OceanBase 的参数和变量的叫法常让初学者混淆,但实际掌握其实并不难。下面就为大家展开介绍。
一、系统参数
通常,在集群级别设置的相关变量称为参数(parameters)。参数的改变会记录到 oceanbase.__all_sys_parameter 和参数文件 observer.conf.bin(二进制格式文件)中,每个节点都保存一份。每次修改后,参数文件都会保留上一个版本在文件 observer.conf.bin.history 里,以避免参数修改错误导致集群启动失败。
1、通过模糊匹配查询
obclient [ORAAUDITOR]> show parameters like '%config_additional_dir%'\G
*************************** 1. row ***************************
zone: zone1
svr_type: observer
svr_ip: 127.0.0.1
svr_port: 2882
name: config_additional_dir
data_type: NULL
value: etc2;etc3
info: additional directories of configure file
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
default_value: etc2;etc3
isdefault: 1
1 row in set (0.004 sec)2、查询多个参数
obclient [oceanbase]> show parameters where name in (
-> 'config_additional_dir',
-> 'enable_sql_audit',
-> 'enable_rebalance'
-> );3、通过数据字典表查询
obclient [oceanbase]> select * from oceanbase.__all_sys_parameter;
+----------------------------+----------------------------+------+----------+--------+----------+-------------------------+-----------+----------------+--------------+------+-------------+----------------+---------------+------------------+---------+---------+-------------------+
| gmt_create | gmt_modified | zone | svr_type | svr_ip | svr_port | name | data_type | value | value_strict | info | need_reboot | section | visible_level | config_version | scope | source | edit_level |
+----------------------------+----------------------------+------+----------+--------+----------+-------------------------+-----------+----------------+--------------+------+-------------+----------------+---------------+------------------+---------+---------+-------------------+
| 2024-03-15 09:25:42.567025 | 2024-03-15 09:25:42.565805 | | observer | ANY | 0 | all_server_list | varchar | 127.0.0.1:2882 | NULL | | NULL | LOCATION_CACHE | NULL | 1710465942565805 | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
| 2024-03-15 09:25:43.456780 | 2024-03-15 09:25:43.457163 | | observer | ANY | 0 | enable_record_trace_log | varchar | 0 | NULL | | NULL | OBSERVER | NULL | 1710465943457163 | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
| 2024-03-15 09:25:42.593868 | 2024-03-15 09:25:42.589550 | | observer | ANY | 0 | min_observer_version | varchar | 4.2.2.0 | NULL | | NULL | ROOT_SERVICE | NULL | 1710465942589550 | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
+----------------------------+----------------------------+------+----------+--------+----------+-------------------------+-----------+----------------+--------------+------+-------------+----------------+---------------+------------------+---------+---------+-------------------+
3 rows in set (0.002 sec)
obclient [oceanbase]> select * from oceanbase.__all_sys_parameter where name like '%config_additional_dir%';
Empty set (0.001 sec)4、通过OS层查看
[root@localhost ob]# cd /opt/ob
[root@localhost ob]# ll
total 4
drwxr-xr-x 2 root root 4096 Mar 15 09:24 admin
drwxr-xr-x 2 root root 57 Mar 15 09:24 audit
drwxr-xr-x 2 root root 95 Mar 15 09:24 bin
drwxr-xr-x 2 root root 308 Mar 15 09:25 etc
drwxr-xr-x 2 root root 64 Mar 15 09:25 etc2
drwxr-xr-x 2 root root 64 Mar 15 09:25 etc3
drwxr-xr-x 2 root root 109 Mar 15 09:24 lib
drwxr-xr-x 2 root root 310 Mar 15 13:13 log
drwxr-xr-x 2 root root 83 Mar 15 09:25 log_obshell
drwxr-xr-x 2 root root 134 Mar 15 09:25 run
drwxr-xr-x 5 root root 45 Mar 15 09:24 store
[root@localhost ob]# cd etc2
[root@localhost etc2]# ll
total 8
-rw-r----- 1 root root 613 Mar 15 09:25 observer.conf.bin
-rw-r----- 1 root root 583 Mar 15 09:25 observer.conf.bin.history
[root@localhost etc2]# pwd
/opt/ob/etc2
[root@localhost etc2]# cd ../etc3
[root@localhost etc3]# ll
total 8
-rw-r----- 1 root root 613 Mar 15 09:25 observer.conf.bin
-rw-r----- 1 root root 583 Mar 15 09:25 observer.conf.bin.history
[root@localhost etc3]# strings observer.config.bin | grep -E "minor_freeze_times|freeze_trigger_percentage5、修改参数
通常是通过 alter system set xxx 方式修改,也可以指定 observer 节点进行修改。
alter system set minor_freeze_times=100;
-- 修改指定节点
alter system set freeze_trigger_percentage=75 server='10.249.130.132:2882';二、系统变量
通常,在租户级别设置的相关变量称为变量(variables)。变量的修改会记录到 oceanbase.__all_virtual_sys_variable 表中。
1、通过模糊匹配查询
obclient [oceanbase]> show variables like '%commit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.002 sec)
obclient [oceanbase]> show global variables like '%commit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.006 sec)2、查询多个变量
obclient [oceanbase]> show global variables where variable_name in ('ob_query_timeout','ob_trx_timeout','ob_trx_idle_timeout');
+---------------------+-------------+
| Variable_name | Value |
+---------------------+-------------+
| ob_query_timeout | 10000000 |
| ob_trx_idle_timeout | 86400000000 |
| ob_trx_timeout | 86400000000 |
+---------------------+-------------+
3 rows in set (0.002 sec)3、通过数据字典表查询
obclient [oceanbase]> select * from __all_virtual_sys_variable where name like '%commit%';
+-----------+------+------------+----------------------------+----------------------------+-----------+-------+------+-------+---------+---------+
| tenant_id | zone | name | gmt_create | gmt_modified | data_type | value | info | flags | min_val | max_val |
+-----------+------+------------+----------------------------+----------------------------+-----------+-------+------+-------+---------+---------+
| 1 | | autocommit | 2024-03-15 09:25:35.058012 | 2024-03-15 09:25:35.058012 | 5 | 1 | | 131 | | |
+-----------+------+------------+----------------------------+----------------------------+-----------+-------+------+-------+---------+---------+
1 row in set (0.006 sec)4、修改变量
通常是通过 set [global] xxx 方式修改。大部分变量都可以反复修改,极少数变量属于初始化变量(如字符集),只能在实例初始化的时候指定一次,后期不能再修改。
例如租户变量 ob_tcp_invited_nodes 可以针对访问来源设置白名单。白名单格式可以是'%',表示允许所有的来源。也可以是一个或多个具体的IP或者子网。
set global ob_tcp_invited_nodes='127.0.0.1,10.249.0.0/16';三、主要区别
一、作用域
通常参数的作用域是集群级别,变量的作用域是租户级别。
参数和变量通常是针对不同的行为做设置。变量的设置在具体的租户里设置,参数的设置在 sys 租户里设置,影响 sys 的行为就是影响这个集群的行为,也就是说参数的值并不是在所有租户都可以看见。
参数的作用域还可以指定生效的节点。默认是所有节点(就是集群级别了)。同时参数的作用域还可以是租户级别,需要指定租户名。
通常只有 sys 租户拥有参数设置的特权,可以管理其他租户的参数设置。这种效果跟到租户里去设置这个参数效果是一样的(在具体的租户里设置就不需要指定租户名)。
二、生效时间
大部分参数的设置是立即生效的,极少数参数修改需要重启节点或集群。
变量的设置生效时间则有点复杂,取决于变量的设置方法。比如说是租户全局级别设置、会话级别设置、语句级别设置。
如果是全局级别的变量设置,老的会话的变量不会变化,只有新建会话的变量设置才会生效;
如果是会话级别的变量设置,该会话里立即生效,但是会话断开重连后,所有变量又读取了全局级别的默认变量设置。
语句级别的变量设置主要是以 Hint 形式存在,只影响当前语句并是立即生效。
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
❤ 欢迎关注我的公众号【凡尘读书楼】,一起学习新知识!
————————————————————————————
公众号:凡尘读书楼
墨天轮:https://www.modb.pro/u/399450
知识星球 :凡尘dba人生有限公司
————————————————————————————




