在 OceanBase 数据库中,租户(tenant)是资源分配的单位,以及数据库对象管理和资源管理的基础。0ceanBase 集群部署完成后,可以创建租户用于在其中创建和管理数据库对象、分配和管理资源。
使用 OceanBase 数据库查询当前租户、系统参数、系统变量和 Unit 分布等基础元信息。
以 MySQL 模式为例进行说明。
租户系统变量和配置项
OceanBase 数据库提供了“系统变量”和“配置项”两种不同的参数来对数据库的行为进行配置,使之能够符合业务的要求。
有很多用户可能还不了解系统变量和配置项的影响范围,例如某个参数的设置,是会影响整个集群,还是影响当前租户,亦或是只影响当前 session。
租户系统变量
OceanBase 的系统变量都是租户级的,也就是只对当前的租户生效。所以系统变量又可以被称作租户系统变量。
设置系统变量时,又可以通过增加 Global 关键字或者 Session 关键字,来设置对应系统变量为全局级别或者会话级别,以调整系统变量在租户内的生效范围:
- 全局变量:表示 Global 级别的修改,数据库同一租户内的不同用户共享一个全局变量。全局变量的修改不会随会话的退出而失效。此外,全局变量修改后,对当前已打开的 Session 不生效,需要重新建立Session 才能生效。
- 会话变量:表示 Session 级别的修改,Session 变量的修改仅对当前 Session 生效。当新的客户端连接到数据库后,数据库会复制全局变量来自动生成对应连接上的 Session 变量。
配置项
OceanBase 数据库的配置项分为集群级配置项和租户级配置项。也称系统参数
集群级配置项
集群级配置项:指适用于整个 OceanBase 数据库集群的配置选项,它们具有全局性质,用于配置整个集群的基本信息、性能参数、安全选项等等。这些配置项通常包括数据备份和恢复、负载均衡等方面的配置选项。集群级配置项通常是在集群启动时进行配置,配置后不轻易修改。
租户级配置项
租户级配置项:指适用于租户级别的配置选项,它们是针对单个租户或多个租户的配置选项。用于对单个租户或多个租户进行特定的配置和优化。这些配置项通常包括存储引擎参数、SQL执行策略、访问控制等方面的配置选项。租户级配置项通常可以在租户创建和管理时进行配置,可以随时根据需要进行修改。
用户自定义变量
用户变量”其实就是“用户自定义变量”,一般会出现在 PL 的存储过程和匿名块之类的地方。
连接数据库
使用 root 用户登录集群的 sys 租户。
obclient -h127.0.0.1 -uroot@sys -P2881 -Dtestdb -A
--参数说明
testdb 数据库已预建完成,不需要手动创建。查询租户
查询当前租户
SHOW tenant;输出如下:
obclient [testdb]> SHOW tenant;
+---------------------+
| Current_tenant_name |
+---------------------+
| sys |
+---------------------+
1 row in set (0.002 sec)查询租户列表
查看租户列表,非 sys 租户下只能查看当前租户
SELECT * FROM oceanbase.DBA_OB_TENANTS;输出如下:
obclient [testdb]> SELECT * FROM oceanbase.DBA_OB_TENANTS;
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+
| 1 | sys | SYS | 2025-06-19 15:01:30.609993 | 2025-06-19 15:01:30.609993 | RANDOM | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | 1 | 4.2.1.0 | 1 |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set (0.026 sec)查询配置项
配置项也称为系统参数
显示所有配置项
SHOW parameters;输出如下:
| TENANT | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| zone1 | observer | 127.0.0.1 | 2882 | max_stale_time_for_weak_consistency | NULL | 5s | the max data stale time that cluster weak read version behind current timestamp,no smaller than weak_read_version_refresh_interval, range: [5s, +∞) | TENANT | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+-----------+----------+-------------------------------------------------+-----------+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+---------+---------+-------------------+
| zone1 | observer | 127.0.0.1 | 2882 | enable_monotonic_weak_read | NULL | False | specifies observer supportting atomicity and monotonic order read
......
| zone1 | observer | 127.0.0.1 | 2882 | cpu_quota_concurrency | NULL | 10 | max allowed concurrency for 1 CPU quota. Range: [1,20]
| zone1 | observer | 127.0.0.1 | 2882 | px_workers_per_cpu_quota | NULL | 10 | the ratio(integer) between the number of system allocated px workers vs the maximum number of threads that can be scheduled concurrently. Range: [0, 20]
223 rows in set (0.004 sec)查询某个配置项
可查询某个配置项为集群级别还是租户级别,输出结果中:
- scope 列对应的值为 CLUSTER 表示该配置项的生效范围为整个集群;如果 scope 列对应的值为TENANT,则表示该配置项的生效范围为当前租户。
- edit_level 列对应的值为 DYNAMIC EFFECTIVE 时表示修改后立即生效,为 STATIC_EFFECTIVE 时则表示需要在重启 OBServer 节点后生效。
SHOW parameters like 'cpu_quota_concurrency'\G;输出如下:
obclient [testdb]> SHOW parameters like 'cpu_quota_concurrency'\G;
*************************** 1. row ***************************
zone: zone1
svr_type: observer
svr_ip: 127.0.0.1
svr_port: 2882
name: cpu_quota_concurrency
data_type: NULL
value: 10
info: max allowed concurrency for 1 CPU quota. Range: [1,20]
section: TENANT
scope: TENANT
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
1 row in set (0.003 sec)
obclient [testdb]> SHOW parameters like 'max_string_print_length'\G;
*************************** 1. row ***************************
zone: zone1
svr_type: observer
svr_ip: 127.0.0.1
svr_port: 2882
name: max_string_print_length
data_type: NULL
value: 500
info: truncate very long string when printing to log file. Range:[0,]
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
1 row in set (0.003 sec)注意事项
上述的查询结果中有一个比较容易和 scope 混淆的 section 列,值可能为:LOAD_BALANCEDAILY_MERGE、RPC、TRANS、LOCATION_CACHE 等等,甚至可能为 TENANT 或者 OBSERVER(上面的示例就专门展示了这种情况)。这个 section 仅仅是一个 tag,只有标签性质,表示这个配置项和哪个模块相关,不代表配置项的生效范围,大家切记要将 scope 和 section 列的含义区分开!
尤其是要注意类似于 TENANT 或者 OBSERVER 这种 tag,估计研发同学在写标签的时候实在不知道相应的配置项该归为哪个模块更合适了,就直接偷懒把标签打成了TENANT 或者 OBSERVER,但这个标签并不代表对当前 tenant 或者当前 session 直连的某个 OBServer 生效。最后附上一个配置项与系统变量的对比:



查询系统变量
“系统变量”称为“租户系统变量”。
OceanBase 的系统变量都是租户级的,也就是只对当前的租户生效。所以系统变量又可以被称作租户系统变量。
查看所有的系统变量
SHOW variables;输出如下:
obclient [testdb]> SHOW variables;
+--------------------------------------+------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+--------------------------------------+------------------------------------------------------------------------------------------------------------------+
| validate_password_special_char_count | 0 |
| version | 5.7.25-OceanBase_CE-v4.2.1.0 |
| version_comment | OceanBase_CE 4.2.1.0 (r100000102023092807-7b0f43693565654bb1d7343f728bc2013dfff959) (Built Sep 28 2023 07:25:28) |
| version_compile_machine | |
| version_compile_os | |
| wait_timeout | 28800 |
| warning_count | 0 |
| _aggregation_optimization_settings | 0 |
| _optimizer_gather_stats_on_load | ON |
| _optimizer_null_aware_antijoin | ON |
| _show_ddl_in_compat_mode | OFF |
| _windowfunc_optimization_settings | 0 |
+--------------------------------------+------------------------------------------------------------------------------------------------------------------+
179 rows in set (0.003 sec)查看指定的系统变量
obclient [testdb]> SHOW variables like 'ob_query_timeout';输出如下:
obclient [testdb]> SHOW variables like 'ob_query_timeout';
+------------------+----------+
| Variable_name | Value |
+------------------+----------+
| ob_query_timeout | 10000000 |
+------------------+----------+
1 row in set (0.002 sec)修改 global 级别的系统变量
修改 global 级别的系统变量
obclient [testdb]> set global ob_query_timeout=20000000;
Query OK, 0 rows affected (0.030 sec)查询修改后global 级别的系统变量
注意:全局变量修改后,对当前已打开的 session 不生效,需要重新建立 session 才能生效。
obclient [testdb]> SHOW variables like 'ob_query_timeout';
+------------------+----------+
| Variable_name | Value |
+------------------+----------+
| ob_query_timeout | 10000000 |
+------------------+----------+
1 row in set (0.001 sec)修改 session级别的系统变量
修改 session级别的系统变量
注意:
- 不加 global 或者 session 关键字,默认修改的是 session 级别的系统变量。
obclient [testdb]> set ob_query_timeout=20000000;
Query OK, 0 rows affected (0.000 sec)查询修改后 session 级别的系统变量
注意:
- Session 变量的修改仅对当前 Session 生效。当新的客户端连接到数据库后,数据库会复制全局变量来自动生成对应连接上的 Session 变量。
obclient [testdb]> SHOW variables like 'ob_query_timeout';
+------------------+----------+
| Variable_name | Value |
+------------------+----------+
| ob_query_timeout | 20000000 |
+------------------+----------+
1 row in set (0.001 sec)查看用户变量
设置自定义用户变量
set @v3=789;查看所有的用户变量
SHOW PROXYSESSION VARIABLES;提示如下报错,暂未找到原因:

操作自定义的用户变量
obclient [testdb]> select concat('abc',@v3);
+-------------------+
| concat('abc',@v3) |
+-------------------+
| abc789 |
+-------------------+
1 row in set (0.001 sec)
obclient [testdb]> select power(@v3,2);
+--------------+
| power(@v3,2) |
+--------------+
| 622521 |
+--------------+
1 row in set (0.001 sec)
补充:
POWER函数的主要作用是返回给定数字的乘幂。POWER函数的语法为:POWER(number,power),其中参数number表示底数;参数power表示指数。查询 Unit 分布
通过 oceanbase.gv$ob_units 视图查看 Unit 分布信息。
SELECT
unit_id,
zone,
max_cpu,
min_cpu,
ROUND(memory_size/1024/1024/1024, 1) AS momory_GB
FROM
oceanbase.gv$ob_units;输出如下:
+---------+-------+---------+---------+-----------+
| unit_id | zone | max_cpu | min_cpu | momory_GB |
+---------+-------+---------+---------+-----------+
| 1 | zone1 | 2 | 2 | 2.0 |
+---------+-------+---------+---------+-----------+
1 row in set (0.002 sec)



