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

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

很多用户在使用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: zone1svr_type: observersvr_ip: 11.158.31.20svr_port: 22602name: cpu_quota_concurrencydata_type: NULLvalue: 4info: max allowed concurrency for 1 CPU quota. Range: [1,20]section: TENANTscope: TENANTsource: 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: zone1svr_type: observersvr_ip: 11.158.31.20svr_port: 22602name: max_string_print_lengthdata_type: NULLvalue: 500info: truncate very long string when printing to log file. Range:[0,]section: OBSERVERscope: CLUSTERsource: 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.mzph.cn/pingmian/81048.shtml

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

相关文章

HTML-3.3 表格布局(学校官网简易布局实例)

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…

如何在Edge浏览器里-安装梦精灵AI提示词管理工具

方案一(应用中心安装-推荐): 梦精灵 跨平台AI提示词管理工具 - Microsoft Edge AddonsMake Microsoft Edge your own with extensions that help you personalize the browser and be more productive.https://microsoftedge.microsoft.com…

GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈

摘要: 网络延迟在AI开发中常被忽视,却严重影响效率。GpuGeek通过技术创新,提供学术资源访问和跨国数据交互的加速服务,助力开发者突破瓶颈。 目录 一、引言:当算力不再稀缺,网络瓶颈如何破局? …

校园社区小程序源码解析

基于ThinkPHP、FastAdmin和UniApp开发的校园社区小程序源码,旨在为校园内的学生和教职员工提供一个便捷的在线交流和服务平台。 该小程序前端采用UniApp进行开发,具有良好的跨平台兼容性,可以轻松发布到iOS和Android平台。同时,后…

【Elasticsearch】flattened`类型在查询嵌套数组时可能返回不准确结果的情况

好的!为了更清楚地说明flattened类型在查询嵌套数组时可能返回不准确结果的情况,我们可以通过一个具体的例子来展示。这个例子将展示如何在文档中没有完全匹配的嵌套对象时,flattened类型仍然可能返回该文档。 示例文档结构 假设你有以下文…

【目标检测】RT-DETR

DETRs Beat YOLOs on Real-time Object Detection DETR在实时目标检测任务中超越YOLO CVPR 2024 代码地址 论文地址 0.论文摘要 YOLO系列因其在速度与精度间的均衡权衡,已成为实时目标检测领域最受欢迎的框架。然而我们观察到,非极大值抑制&#xf…

笔试强训:Day5

一、笨小猴&#xff08;哈希数学&#xff09; 笨小猴_牛客题霸_牛客网 #include <iostream> #include <cmath> using namespace std; string s; bool isprime(int x){//试除法if(x2) return true;if(x<2||x%20) return false;int nsqrt(x);for(int i3;i<n;i…

掌握 LangChain 文档处理核心:Document Loaders 与 Text Splitters 全解析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是LangChain 2、LangChain 在智能应用中的作用 …

开发工具指南

后端运维场用工具 工具文档简介1panel安装指南运维管理面板网盘功能介绍网盘jenkins可以通过1panel 进行安装jpom辅助安装文档后端项目发布工具

拷贝构造函数如果不加引用会怎样?

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1…

UE5中制作动态数字Decal

在进行城市道路编辑时&#xff0c;经常需要绘制人行道、交通标志、停车线等路面元素。如果能够使用具有动态修改功能的 Decal&#xff08;贴花&#xff09;&#xff0c;将大大提升编辑效率和灵活性。接下来讲解如何制作。 1.首先准备一张包含所需元素的Texture&#xff0c;这里…

【Leetcode 每日一题】2900. 最长相邻不相等子序列 I

问题背景 给你一个下标从 0 0 0 开始的字符串数组 w o r d s words words&#xff0c;和一个下标从 0 0 0 开始的 二进制 数组 g r o u p s groups groups&#xff0c;两个数组长度都是 n n n。 你需要从 w o r d s words words 中选出 最长子序列。如果对于序列中的任何…

ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例

ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例 在当今数字化工业时代&#xff0c;智能仪表与控制系统的互联互通成为提高生产效率和管理水平的关键。横河AXG电磁流量计作为一款高性能的流量测量设备&#xff0c;在多个行业得到了广泛应用。而Profibus DP作为一种…

微软向现实低头:悄悄延长Windows 10的Microsoft 365支持

快科技5月11日消息&#xff0c;Windows 10将在今年10月14日正式结束支持&#xff0c;此前微软曾明确表示&#xff0c;Microsoft 365&#xff08;M365&#xff09;应用&#xff0c;如Outlook、Teams、OneDrive、Word、Excel等&#xff0c;也将随之停止支持。 不过无法升级至Win…

【Spring AI】模型记忆持久化 + 自动加载记忆上下文

当我们利用大模型进行开发时&#xff0c;有时会因为项目重启而丢失模型的记忆&#xff0c;会给开发的过程带来不方便 接下来我将介绍如何将模型的记忆持久化&#xff0c;并保证在项目重启后依然能能够正常加载记忆上下文。 我们在配置ChatClient时&#xff0c;由于想要实现模…

(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)

目录 前言&#xff1a; 源代码&#xff1a; product.h product.c fileio.h fileio.c main.c 代码解析&#xff1a; 一、程序结构概述 二、product.c 函数详解 1. 初始化商品列表 Init_products 2. 添加商品 add_product 3. 显示商品 display_products 4. 修改商品 mo…

[服务器面板对比] 宝塔、aaPanel、Plesk、cPanel 哪家强?功能、性能与价格横评 (2025)

对于很多 Linux 服务器用户来说&#xff0c;直接面对黑乎乎的命令行界面 (CLI) 进行各种操作&#xff0c;虽然强大灵活&#xff0c;但也确实有一定的学习门槛和操作复杂度。特别是当你需要管理多个网站、数据库、FTP账户&#xff0c;或者进行日常的软件安装、安全配置、日志查看…

WebGL图形编程实战【7】:变换流水线 × 坐标系与矩阵精讲

变换流水线 #mermaid-svg-Omabd9LSNCdIvWqB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Omabd9LSNCdIvWqB .error-icon{fill:#552222;}#mermaid-svg-Omabd9LSNCdIvWqB .error-text{fill:#552222;stroke:#552222;…

电力电容器故障利用沃伦森(WARENSEN)工业设备智能运维系统解决方案

行业工况背景 当配电室报警显示“电容器故障”时&#xff0c;管理者可能会感到焦虑。沃伦森&#xff08;WARENSEN&#xff09;凭借十多年的电力补偿设备服务经验&#xff0c;提供了科学的故障应对流程&#xff0c;帮助避免大部分二次损失。 一、五大常见故障现象快速识别 温度…

星海智算云平台部署GPT-SoVITS模型教程

背景 随着 GPT-SoVITS 在 AI 语音合成领域的广泛应用&#xff0c;越来越多的个人和团队开始关注这项前沿技术。你是否也在思考&#xff0c;如何快速、高效地部署并体验这款强大的声音克隆模型&#xff1f;遗憾的是&#xff0c;许多本地部署方案不仅配置复杂&#xff0c;而且对…