OceanBase 的系统变量、配置项和用户变量有何差异

news2025/5/20 23:43:33
在继续阅读本文之前,大家不妨先思考一下,数据库中“系统变量”、“用户变量”以及“配置项”这三者之间有何不同。如果感到有些模糊,那么本文将是您理清这些概念的好帮手。

很多用户在使用OceanBase数据库中的“配置项”和“系统变量”,但可能未能完全理解它们之间的区别。在社区论坛里,也看到一个帖子,该帖子询问“系统变量”与“用户变量”有何不同,还提及了“用户变量”。

1728720645

下面有不少热心用户积极回复,但感觉完全讲清楚两者区别的并不多,有一些同学还把 “配置项” 也掺进来一起讨论。所以想趁机搞明白这三者之间的区别,在这里分享给大家。为了解释的更清楚,在下面的标题中,我会把 “系统变量” 称为 “租户系统变量”,把 “用户变量” 成为 “用户自定义变量”。

租户系统变量和配置项

OceanBase 数据库提供了 “系统变量” 和 “配置项” 两种不同的参数来对数据库的行为进行配置,使之能够符合业务的要求。

有很多用户可能还不了解系统变量和配置项的影响范围,例如某个参数的设置,是会影响整个集群,还是影响当前租户,亦或是只影响当前 session。所以先抛开用户变量,先说说这两个更常见和常用的东西。

租户系统变量

OceanBase 的系统变量都是组户级的,也就是只对当前的租户生效。所以系统变量又可以被称作:租户系统变量。

设置系统变量时,又可以通过增加 Global 关键字或者 Session 关键字,来设置对应系统变量为全局级别或者会话级别,以调整系统变量在租户内的生效范围:

  • 全局变量:表示 Global 级别的修改,数据库同一租户内的不同用户共享一个全局变量。全局变量的修改不会随会话的退出而失效。此外,全局变量修改后,对当前已打开的 Session 不生效,需要重新建立 Session 才能生效。
  • 会话变量:表示 Session 级别的修改,Session 变量的修改仅对当前 Session 生效。当新的客户端连接到数据库后,数据库会复制全局变量来自动生成对应连接上的 Session 变量。
-- 执行 show variables; 可以看到全量系统变量
obclient [test]> show variables like 'ob_query_timeout';
+------------------+----------+
| Variable_name    | Value    |
+------------------+----------+
| ob_query_timeout | 10000000 |
+------------------+----------+
1 row in set (0.004 sec)

-- 修改 global 级别的系统变量
obclient [test]> set global ob_query_timeout = 20000000;
Query OK, 0 rows affected (0.004 sec)

-- 全局变量修改后,对当前已打开的 session 不生效,需要重新建立 session 才能生效。
obclient [test]> show variables like 'ob_query_timeout';
+------------------+----------+
| Variable_name    | Value    |
+------------------+----------+
| ob_query_timeout | 10000000 |
+------------------+----------+
1 row in set (0.003 sec)

-- 不加 global 或者 session 关键字,默认修改的是 session 级别的系统变量
obclient [test]> set ob_query_timeout = 20000000;
Query OK, 0 rows affected (0.001 sec)

obclient [test]> show variables like 'ob_query_timeout';
+------------------+----------+
| Variable_name    | Value    |
+------------------+----------+
| ob_query_timeout | 20000000 |
+------------------+----------+
1 row in set (0.001 sec)

配置项

OceanBase 数据库的配置项分为集群级配置项和租户级配置项。

  • 集群级配置项:指适用于整个 OceanBase 数据库集群的配置选项,它们具有全局性质,用于配置整个集群的基本信息、性能参数、安全选项等等。这些配置项通常包括数据备份和恢复、负载均衡等方面的配置选项。集群级配置项通常是在集群启动时进行配置,配置后不轻易修改。
  • 租户级配置项:指适用于租户级别的配置选项,它们是针对单个租户或多个租户的配置选项。用于对单个租户或多个租户进行特定的配置和优化。这些配置项通常包括存储引擎参数、SQL 执行策略、访问控制等方面的配置选项。租户级配置项通常可以在租户创建和管理时进行配置,可以随时根据需要进行修改。

查询某个配置项为集群级别还是租户级别的方法如下:

obclient [test]> SHOW PARAMETERS; -- 展示所有配置项

obclient [test]> SHOW PARAMETERS like 'cpu_quota_concurrency'\G
*************************** 1. row ***************************
      zone: zone1
  svr_type: observer
    svr_ip: 11.158.31.20
  svr_port: 22602
      name: cpu_quota_concurrency
 data_type: NULL
     value: 4
      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.004 sec)

obclient [test]> SHOW PARAMETERS like 'max_string_print_length'\G
*************************** 1. row ***************************
      zone: zone1
  svr_type: observer
    svr_ip: 11.158.31.20
  svr_port: 22602
      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.005 sec)

scope 列对应的值为 CLUSTER 表示该配置项的生效范围为整个集群;如果 scope 列对应的值为 TENANT,则表示该配置项的生效范围为当前租户。

edit_level 列对应的值为 DYNAMIC_EFFECTIVE 时表示修改后立即生效,为 STATIC_EFFECTIVE 时则表示需要在重启 OBServer 节点后生效。

注意:

上述的查询结果中有一个比较容易和 scope 混淆的 section 列,值可能为:LOAD_BALANCE、DAILY_MERGE、RPC、TRANS、LOCATION_CACHE 等等,甚至可能为 TENANT 或者 OBSERVER(上面的示例就专门展示了这种情况)。这个 section 仅仅是一个 tag,只有标签性质,表示这个配置项和哪个模块相关,不代表配置项的生效范围,大家切记要将 scope 和 section 列的含义区分开!

尤其是要注意类似于 TENANT 或者 OBSERVER 这种 tag,估计研发同学在写标签的时候实在不知道相应的配置项该归为哪个模块更合适了,就直接偷懒把标签打成了 TENANT 或者 OBSERVER,但这个标签并不代表对当前 tenant 或者当前 session 直连的某个 OBServer 生效。

最后附上一个配置项与系统变量的对比:

对比项配置项系统变量
生效范围分为集群、Zone、机器和租户。分为租户的 Global 或 Session 级别。
生效方式动态生效:edit_level 为 dynamic_effective 重启生效:edit_level 为 static_effective设置 Session 级别的变量仅对当前 Session 有效,对其他 Session 无效。 设置 Global 级别的变量对当前 Session 无效,需要重新登录建立新的 Session 才会生效。
修改方式支持通过 SQL 语句修改,示例: Alter SYSTEM SET schema_history_expire_time='1h';支持通过启动参数修改,示例: cd /home/admin/oceanbase && ./bin/observer -o "schema_history_expire_time='1h'";仅支持通过 SQL 语句修改,示例如下:MySQL 模式 SET ob_query_timeout = 20000000; SET GLOBAL ob_query_timeout = 20000000;
查询方式可以使用 SHOW PARAMETERS 语句查询。示例:SHOW PARAMETERS LIKE 'schema_history_expire_time';可以使用 SHOW [GLOBAL] VARIABLES 语句查询。示例如下:SHOW VARIABLES LIKE 'ob_query_timeout'; SHOW GLOBAL VARIABLES LIKE 'ob_query_timeout';
持久化持久化到内部表与配置文件,可以在 /home/admin/oceanbase/etc/observer.config.bin 与 /home/admin/oceanbase/etc/observer.config.bin.history 文件中查询该配置项。仅 Global 级别的变量会持久化,Session 级别的变量不会进行持久化。
生命周期长,从进程启动到退出。短,需要租户的 Schema 创建成功以后才生效。

用户自定义变量

发帖者提问中的 “用户变量” 其实就是“用户自定义变量”,一般会出现在 PL 的存储过程和匿名块之类的地方。

obclient [test]> SET @v3 = 789;
Query OK, 0 rows affected (0.002 sec)

obclient [test]> SHOW PROXYSESSION VARIABLES;
+-----------------------------------+--------------+-----------------+--------------------+--------------------------------------------+
| variable_name                     | value        | info            | modified_type      | sys_variable_flag                          |
+-----------------------------------+--------------+-----------------+--------------------+--------------------------------------------+
| ob_proxy_global_variables_version | 0            | changed sys var | cold modified vars |  && invisible && session_scope && readonly |
| ob_proxy_user_privilege           | 133009965054 | changed sys var | cold modified vars |  && invisible && session_scope && readonly |
| ob_capability_flag                | 916295       | changed sys var | cold modified vars |  && invisible && session_scope && readonly |
| ob_enable_transmission_checksum   | 1            | changed sys var | cold modified vars |  && global_scope && session_scope          |
| _min_cluster_version              | '4.2.1.2'    | user var        | cold modified vars |                                            |
| v3                                | 789          | user var        | cold modified vars |                                            |
+-----------------------------------+--------------+-----------------+--------------------+--------------------------------------------+
6 rows in set (0.001 sec)

obclient [test]> select concat('abc', @v3);
+--------------------+
| concat('abc', @v3) |
+--------------------+
| abc789             |
+--------------------+
1 row in set (0.002 sec)

obclient [test]> select power(@v3, 2);
+---------------+
| power(@v3, 2) |
+---------------+
|        622521 |
+---------------+
1 row in set (0.002 sec)

帖子中的链接里说的执行 SHOW PROXYSESSION VARIABLES 可以展示出来的用户变量,就是上面例子中用户自定义的 @v3 了。用户自定义变量在一般情况下的使用频率不会太高,所以就偷懒贴一个 官方文档的链接 供大家学习参考啦~

参考文档

OceanBase 官网的文档中心日渐完善,最后也在这里推荐大家自主在官网搜索和解决各类问题~

文档中心 - 配置项和系统变量概述

文档中心 - 用户自定义变量


OceanBase 云数据库现已支持免费试用,现在申请,体验分布式数据库带来全新体验吧 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2380321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】Jupyter指定具体路径

一、右键Jupyter Notebook 右击Jupyter Notebook点击属性 二、修改以下两个地方

RNope:结合 RoPE 和 NoPE 的长文本建模架构

TL;DR 2025 年 Cohere 提出的一种高效且强大的长上下文建模架构——RNope-SWA。通过系统分析注意力模式、位置编码机制与训练策略,该架构不仅在长上下文任务上取得了当前最优的表现,还在短上下文任务和训练/推理效率方面实现了良好平衡。 Paper name …

virtualbox虚拟机中的ubuntu 20.04.6安装新的linux内核5.4.293 | 并增加一个系统调用 | 证书问题如何解决

参考文章:linux添加系统调用【简单易懂】【含32位系统】【含64位系统】_64位 32位 系统调用-CSDN博客 安装新内核 1. 在火狐下载你需要的版本的linux内核压缩包 这里我因为在windows上面下载过,配置过共享文件夹,所以直接复制粘贴通过共享文…

unity UGUI虚线框shader

Shader "Custom/DottedLineShader" {Properties{_MainTex ("Texture", 2D) "white" {}_Color("Color",COLOR) (1,1,1,1)_LineLength("虚线长度",float) 0.08}SubShader{Tags //设置支持UGUI{ "Queue""Tran…

chirpstack v4版本 全流程部署[ubuntu+docker]

背景介绍 由于chirpstackv3 版本使用的是锐米提供的版本,从网络上寻找的资源大多数都是一样的v3版本,是经过别人编译好发布出来的,原本的chirpsatck项目是运行的linxu环境下的,因此我的想法是在linux服务器上部署chirpsatckv4,暂时使用linux上的chirpstack v4版本,目前编译成e…

数字信号处理-大实验1.1

MATLAB仿真实验目录 验证实验:常见离散信号产生和实现验证实验:离散系统的时域分析应用实验:语音信号的基音周期(频率)测定 目录 一、常见离散信号产生和实现 1.1 实验目的 1.2 实验要求与内容 1.3 实验…

对抗性机器学习:AI模型安全防护新挑战

随着采用对抗性机器学习(Adversarial Machine Learning, AML)的AI系统融入关键基础设施、医疗健康和自动驾驶技术领域,一场无声的攻防战正在上演——防御方不断强化模型,而攻击者则持续挖掘漏洞。2025年,对抗性机器学习…

[[春秋云境] Privilege仿真场景

文章目录 靶标介绍:知识点卷影拷贝(VSS) 外网任意文件读取Jenkins管理员后台rdp远程登录Gitlab apiToken 内网搭建代理 Oracle RCESeRestorePrivilege提权mimikatzspn卷影拷贝提取SAM 参考文章 靶标介绍: 在这个靶场中,您将扮演一名资深黑客…

Redis学习打卡-Day3-分布式ID生成策略、分布式锁

分布式 ID 当单机 MySQL 已经无法支撑系统的数据量时,就需要进行分库分表(推荐 Sharding-JDBC)。在分库之后, 数据遍布在不同服务器上的数据库,数据库的自增主键已经没办法满足生成的主键全局唯一了。这个时候就需要生…

数据库第二次作业--SQL的单表查询与多表查询

单表查询 查询专业信息表中的专业名称和专业类型 SELECT Mname, Mtype FROM MajorP;查询一个学校有多少个专业 SELECT COUNT(Mno) AS 专业数量 FROM MajorP;查询学校的男女学生各有多少位 SELECT Ssex, COUNT(*) AS 人数 FROM StudentP GROUP BY Ssex查询每个专业…

在Cursor中启用WebStorm/IntelliJ风格快捷键

在Cursor中启用WebStorm/IntelliJ风格快捷键 方法一:使用预置快捷键方案 打开快捷键设置 Windows/Linux: Ctrl K → Ctrl SmacOS: ⌘ K → ⌘ S 搜索预设方案 在搜索框中输入keyboard shortcuts,选择Preferences: Open Keyboard Shortcuts (JSON) …

vue3:十三、分类管理-表格--编辑、新增、详情、刷新

一、效果 实现封装表格的新增、编辑、详情查看,表格刷新功能 实现表格组件中表单的封装 1、新增 如下图,新增页面显示空白的下拉,文本框,文本域,并实现提交功能 2、编辑 如下图,点击行数据,可将行数据展示到编辑弹窗,并实现提交功能 3、详情 如下图,点击行数据,…

c#基础01(.Net介绍)

文章目录 .Net平台介绍.Net平台简介跨平台开源.Net Core.Net Framework开发工具安装选项 创建项目 .Net平台介绍 .Net平台简介 .NET是一种用于构建多种应用的免费开源开放平台,例如: Web 应用、Web API 和微服务 云中的无服务器函数 云原生应用 移动…

Logrotate:配置日志轮转、高效管理Linux日志文件

Logrotate 是 Linux 系统中用于自动化管理日志文件的工具,能够定期轮转、压缩、删除日志文件,确保系统日志不会无限制增长,占用过多磁盘空间。 它通常由 Cron 作业定期执行,也可以手动触发。 1. 🔧 核心功能 日志轮转…

贵州某建筑物挡墙自动化监测

1. 项目简介 某建筑物位于贵州省某县城区内,靠近县城主干道,周边配套学校、医院、商贸城。建筑物临近凤凰湖、芙蓉江等水系,主打“湖景生态宜居”。改建筑物总占地面积:约5.3万平方米;总建筑面积:约15万平…

nginx服务器实验

1.实验要求 1)在Nginx服务器上搭建LNMP服务,并且能够对外提供Discuz论坛服务。 在Web1、Web2服务器上搭建Tomcat 服务。 2)为nginx服务配置虚拟主机,新增两个域名 www.kgc.com 和 www.benet.com,使用http://www.kgc.…

高速光耦在通信行业的应用(五) | 5Mbps通信光耦的特性

针对5MBd速率光耦市场,晶台推出KL2200、KL2201和KL2202系列光耦 ,对标大部分国外品牌产品的应用;它分别由一个红外发射二极管和一个高速集成光电检测器逻辑门组成。 它采用 8 引脚 DIP 封装,并提供 SMD 选项。KL2200 的检测器具有一个三态输出…

Apidog MCP服务器,连接API规范和AI编码助手的桥梁

#作者:曹付江 文章目录 1.了解 MCP2.什么是 Apidog MCP 服务器?3.Apidog MCP 服务器如何工作4.利用人工智能改变开发工作流程5.设置 Apidog MCP 服务器: 分步指南5.高级功能和提示5.1 使用 OpenAPI 规范5.2.多个项目配置5.3.安全最佳实践5.4…

国内MCP服务平台推荐 AIbase推出MCP服务器客户端商店

在当今数字化时代,人工智能(AI)技术正以前所未有的速度发展,不断改变着我们的生活和工作方式。2025年,AI领域迎来了一项重要的技术进展——MCP(Model Context Protocol,模型上下文协议)的广泛应用。这一技术…

Profinet转Ethernet IP主站网关:点燃氢醌生产线的智慧之光!

案例分享:转角指示器和Profinet转EthernetIP网关的应用 在现代工业自动化中,设备和系统之间的高效通信至关重要。最近,我们在某大型化工企业的生产线上实施了一个项目,旨在通过先进的设备和通信技术提高生产效率和安全性。该项目…