OceanBase 配置项系统变量实现及应用详解(1):配置项的定义及使用方法

《OceanBase 配置项&系统变量实现及应用详解》专题导读

在使用OceanBase的过程中,看到大家经常会遇到“参数”、“配置项”、“系统变量”等概念,却不太清楚它们是不是同一个东西,以及应该如何使用。一些对数据库开发感兴趣的朋友,也想知道它们的实现原理是怎样的,并且想尝试自己增加一些配置项或者变量。

目前已经有一些文档和博客介绍过了相关概念和基本的用法(见“参考文档”),并且也有少量的源码解析文章,但总的来说相关资料还不太完整。

《OceanBase 配置项&系统变量实现及应用详解》专题基于大家的常见问题,通过基础篇、开发篇以及应用篇的内容,给大家介绍 OceanBase 配置项以及系统变量的实现原理、使用方法、开发流程、问题排查等知识,希望能够帮助大家解决各种应用问题。

这是专题的第一篇,主要为大家介绍配置项的基本概念和使用方法。

什么是配置项(参数)?

参数(parameter)的概念来源于Oracle,在 OceanBase 中,参数也叫做配置项,它对集群或租户的硬件规格、部署形式、行为方式进行了定义。

在部署 OceanBase 集群时,首先就会用到配置文件。如果是白屏工具,至少也需要设置cpu数量、内存大小、磁盘大小等参数,这些参数就是“配置项”。

集群配置项示例:

// 集群cpu总数
cpu_count=8
// 系统租户内存大小
system_memory=1G
// 集群内存总大小
memory_limit=16G
// 网络线程数量
net_thread_count=4

配置项分为集群级别和租户级别两种,集群配置项对整个集群生效,只能通过系统租户修改。租户配置项只对当前租户生效,可以通过当前租户或系统租户修改。

租户配置项示例:

// 是否开启负载均衡功能
enable_rebalance=true
// 是否开启提前解行锁功能
enable_early_lock_release=true
// 触发冻结的内存使用比例
freeze_trigger_percentage=20

配置项会持久化到安装目录下的 etc/observer.config.bin 文件中,包括集群和租户配置项,但是只存储和默认值不同的配置项,剩下的通过默认值即可恢复。

配置项的生效方式分为动态和静态,大部分配置项都是动态生效的,通过sql命令修改即可生效。少数配置项是静态生效的,修改后需要重启集群才能生效,比如 net_thread_count、enable_cgroup。

查询配置项

配置项可以通过“show parameters”命令查询,这种方式比较推荐。另外也可以通过视图或内部表进行查询,前提是需要对视图或内部表的内容有所了解。

使用 show parameters 命令查询配置项

  • 系统租户

1. 查询集群配置项:

show parameters where name = 'xxx';

mysql> show parameters where name = 'cpu_count';
+-------+----------+----------------+----------+-----------+-----------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
| zone  | svr_type | svr_ip         | svr_port | name      | data_type | value | info                                                                                                                                                                             | section  | scope   | source  | edit_level        |
+-------+----------+----------------+----------+-----------+-----------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
| zone3 | observer | 192.168.10.3   |    12805 | cpu_count | NULL      | 32    | the number of CPU\'s in the system. If this parameter is set to zero, the number will be set according to sysconf; otherwise, this parameter is used. Range: [0,+∞) in integer   | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
| zone1 | observer | 192.168.10.1   |    12801 | cpu_count | NULL      | 32    | the number of CPU\'s in the system. If this parameter is set to zero, the number will be set according to sysconf; otherwise, this parameter is used. Range: [0,+∞) in integer   | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
| zone2 | observer | 192.168.10.2   |    12803 | cpu_count | NULL      | 32    | the number of CPU\'s in the system. If this parameter is set to zero, the number will be set according to sysconf; otherwise, this parameter is used. Range: [0,+∞) in integer   | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+----------------+----------+-----------+-----------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
3 rows in set (0.06 sec)

可以看到,一个配置项在每个节点都有一个副本,他们的值是一致的。其中 name 是配置项名;value是配置项的值;scope 表示作用域,也就是集群级别(CLUSTER)或租户级别(TENANT);edit_level 表示生效方式,分为动态生效(DYNAMIC_EFFECTIVE)和静态生效(STATIC_EFFECTIVE)。

2. 查询当前租户的配置项:

show parameters where name = 'xxx';

3. 查询指定租户的配置项;

show parameters where name = 'xxx' tenant = xxx;

  • 普通租户

1. 查询集群配置项:

show parameters where name = 'xxx';

2. 查询当前租户的配置项:

show parameters where name = 'xxx';

mysql> show parameters where name = 'freeze_trigger_percentage';
+-------+----------+----------------+----------+---------------------------+-----------+-------+----------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
| zone  | svr_type | svr_ip         | svr_port | name                      | data_type | value | info                                                                                   | section | scope  | source  | edit_level        |
+-------+----------+----------------+----------+---------------------------+-----------+-------+----------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
| zone1 | observer | 192.168.10.1   |    12801 | freeze_trigger_percentage | NULL      | 20    | the threshold of the size of the mem store when freeze will be triggered. Rang:(0,100) | TENANT  | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| zone2 | observer | 192.168.10.2   |    12803 | freeze_trigger_percentage | NULL      | 20    | the threshold of the size of the mem store when freeze will be triggered. Rang:(0,100) | TENANT  | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| zone3 | observer | 192.168.10.3   |    12805 | freeze_trigger_percentage | NULL      | 20    | the threshold of the size of the mem store when freeze will be triggered. Rang:(0,100) | TENANT  | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+----------------+----------+---------------------------+-----------+-------+----------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
3 rows in set (0.02 sec)

通过内部表与视图查询配置项

集群配置项和租户配置项存在于不同的表中,通过执行“select * from xxx; ”命令即可查询所有配置项,增加where参数也可查找指定配置项。

  • __all_virtual_sys_parameter_stat

集群配置项和系统租户的租户配置项。

  • __all_virtual_tenant_parameter_info

所有租户的租户配置项。

  • __all_virtual_tenant_parameter_stat

集群配置项和所有租户配置项。

  • GV$OB_PARAMETERS

集群配置项和所有租户配置项,即 __all_virtual_tenant_parameter_stat 的视图。

mysql> select * from GV$OB_PARAMETERS where name like '%weak_read%' and zone = 'zone1';
+---------------+----------+-------+---------+-----------+------------------------------------+-----------+-------+----------------------------------------------------------------------------+----------+-------------------+
| SVR_IP        | SVR_PORT | ZONE  | SCOPE   | TENANT_ID | NAME                               | DATA_TYPE | VALUE | INFO                                                                       | SECTION  | EDIT_LEVEL        |
+---------------+----------+-------+---------+-----------+------------------------------------+-----------+-------+----------------------------------------------------------------------------+----------+-------------------+
| 192.168.10.1  |    12801 | zone1 | CLUSTER |      NULL | weak_read_version_refresh_interval | NULL      | 100ms | the time interval to refresh cluster weak read version Range: [50ms, +∞)   | OBSERVER | DYNAMIC_EFFECTIVE |
| 192.168.10.1  |    12801 | zone1 | TENANT  |         1 | enable_monotonic_weak_read         | NULL      | False | specifies observer supportting atomicity and monotonic order read          | TENANT   | DYNAMIC_EFFECTIVE |
| 192.168.10.1  |    12801 | zone1 | TENANT  |      1001 | enable_monotonic_weak_read         | NULL      | False | specifies observer supportting atomicity and monotonic order read          | TENANT   | DYNAMIC_EFFECTIVE |
| 192.168.10.1  |    12801 | zone1 | TENANT  |      1002 | enable_monotonic_weak_read         | NULL      | False | specifies observer supportting atomicity and monotonic order read          | TENANT   | DYNAMIC_EFFECTIVE |
+---------------+----------+-------+---------+-----------+------------------------------------+-----------+-------+----------------------------------------------------------------------------+----------+-------------------+
4 rows in set (0.00 sec)

查询该视图,可以同时看到集群配置项和租户配置项,集群配置项全局唯一,租户配置项每个租户各有一个。

  • V$OB_PARAMETERS

当前节点下所有集群配置项和租户配置项。

  • __tenant_parameter

增量租户配置项内部表。修改租户配置项时,会将新值写到租户对应的该表中,每个租户各有一张该表。

  • __all_sys_parameter

增量集群配置项内部表。系统租户修改集群配置项时,会将新值写到全局唯一的该表中。

修改配置项

配置项可以通过4种方式进行修改和设置:

  1. 部署配置文件(xxx.yaml);
  2. 启动参数(./bin/observer -o xxx=xx);
  3. 持久化配置文件(etc/observer.config.bin);
  4. SQL命令(alter system set xxx=xx):

通过部署配置文件设置配置项

在使用obd工具或脚本部署 OceanBase 集群时,一般都会用到一个部署配置文件(single.yaml、distributed.yaml 等),里面的参数就是集群配置项,它们指定了集群部署的节点地址、安装目录、硬件规格等参数。

其中 observer.include.yaml 文件是部署工具自带的默认配置,包含了安装部署所需要的配置项,其中的值和代码中配置项的默认值可能有所不同。在部署时会优先选择用户编写的 xxx.yaml 中的值,然后再去 observer.include.yaml 文件中寻找配置项的值,最后才会从代码中获取默认值。

部署配置文件示例:

oceanbase:servers:- name: server1ip: 127.0.0.1server1:mysql_port: 23410rpc_port: 23411home_path: /data/observer1zone: zone1data_dir: /data/observer1/dataredo_dir: /data/observer1/redotag: latestinclude: /data/oceanbase/tools/deploy/obd/observer.include.yamlglobal: devname: lomemory_limit: '8G'system_memory: '1G'datafile_size: '40G'log_disk_size: '40G'cpu_count: '4'

在部署过程中,这些配置会以参数的形式出现在observer进程的启动命令中,最终和“通过启动参数设置配置项”殊途同归。

通过启动参数设置配置项

通过在 observer 的启动命令中增加参数,可以在部署集群时直接设置配置项的值。这种方式一般很少手动使用,但在重启observer时也是一种可行的方法。

在启动命令中设置参数:

./observer -o xxx=xx,yyy=yy

observer启动命令示例:

/data/user/observer1/bin/observer -p 23400 -P 23401 -z zone1 -c 1 -d /data/user/observer1/store -i lo -r 127.0.0.1:23401:23400 -o __min_full_resource_pool_memory=268435456,major_freeze_duty_time=Disable,datafile_size=20G,memory_limit=10G,system_memory=5G,cpu_count=24,stack_size=512K,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,minor_freeze_times=10,enable_separate_sys_clog=False,enable_merge_by_turn=False,syslog_io_bandwidth_limit=10G,enable_async_syslog=False

通过持久化配置文件修改配置项

前面说过,配置项会持久化到文件 etc/observer.config.bin 中。如果直接修改该文件,然后再启动集群,也可以达到修改配置项的效果。不过这种方式并不推荐,有一定风险。

持久化配置文件示例:

^Aû<8d><80><80>^@¼Þ^@ ^@^Aÿ8^@^@^@^@^@^@^@^@^@^@^FÛ^@^@^FÛ^@^@^@^@,^L<90>4^A<9d><85><80><80>^@observer_id=1
local_ip=xxx.xxx.xxx.1
all_server_list=xxx.xxx.xxx.1:23401,xxx.xxx.xxx.2:23403,xxx.xxx.xxx.3:23405
__min_full_resource_pool_memory=1073741824
log_disk_size=100G
min_observer_version=4.2.0.0
workers_per_cpu_quota=10
cache_wash_threshold=1G
enable_syslog_wf=False
syslog_io_bandwidth_limit=10G
syslog_level=WDIAG
cluster_id=1
rootservice_list=xxx.xxx.xxx.1:23401:23400;xxx.xxx.xxx.2:23403:23402;xxx.xxx.xxx.3:23405:23404
schema_history_expire_time=1d
cpu_count=11
system_memory=2G
memory_limit=32G
net_thread_count=4
zone=zone1
devname=eth0
mysql_port=23400
rpc_port=23401
datafile_maxsize=8G
datafile_next=2G
datafile_size=80G
data_dir=/data/1/user/observer1/store
^A²<88><80><80>^@^Aí<81><80><80>^@[1]
^Aã<81><80><80>^@enable_sql_extension=True
ob_compaction_schedule_interval=10s
_enable_adaptive_compaction=False
merger_check_interval=10s
partition_balance_schedule_interval=0
balancer_idle_time=10s
compatible=4.2.0.0
cpu_quota_concurrency=10
^AÀ<81><80><80>^@[1001]
^A³<81><80><80>^@enable_sql_extension=True
ob_compaction_schedule_interval=10s
_enable_adaptive_compaction=False
merger_check_interval=10s
partition_balance_schedule_interval=0
compatible=4.2.0.0
^AÀ<81><80><80>^@[1002]
^A³<81><80><80>^@enable_sql_extension=True
ob_compaction_schedule_interval=10s
_enable_adaptive_compaction=False
merger_check_interval=10s
partition_balance_schedule_interval=0
compatible=4.2.0.0

通过SQL命令修改配置项

用命令修改配置项是最常用的一种方式。

  • 系统租户

1. 修改集群配置项:

alter system set xxx = 'xxx';

2. 修改当前租户的配置项:

alter system set xxx = 'xxx';

3. 修改指定租户的配置项:

alter system set xxx = 'xxx' tenant = xxx;

4. 修改所有租户的配置项:

alter system set xxx = 'xxx' tenant = all;

  • 普通租户

修改当前租户的配置项:

alter system set xxx = 'xxx';

小结

本期博客介绍了配置项(参数)的概念和使用方法,相信大家只要注意区分作用域和生效方式,在使用配置项时就不会有太大问题。如果大家在部署集群或者创建租户时遇到问题,建议看看集群或租户配置项设置是否合理。如果测试性能不符合预期,有可能是因为租户规格不太合适,可以试着调整下相关配置项。

下一篇博客将会介绍“系统变量”的概念和用法,并对配置项和系统变量进行对比,感兴趣的同学不妨关注一下。

参考文档

  1. 配置项和系统变量概述
  2. 配置项总览
  3. OB有问必答 | 参数和变量的区别是什么?
  4. ​​​​​​​调整 OceanBase 配置项参数​​​​​​​

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

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

相关文章

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(九)-git(1)

Git是一个版本管理控制系统&#xff08;缩写VCS&#xff09;&#xff0c;它可以在任何时间点&#xff0c;将文档的状态作为更新记录保存起来&#xff0c;也可以在任何时间点&#xff0c;将更新记录恢复回来。 文章目录 前言 一、git是什么 二、git基本概念 三、git基本命令 总结…

电商项目中分与元金额单位互转实战

在Java开发中&#xff0c;可能遇到金额单位的转换&#xff0c;比如本系统用分作为金额的基本单位&#xff0c;对方系统用元作为金额的基本单位&#xff0c;这就需要进行单位转换&#xff0c;记录下来&#xff0c;方便备查。 一、分转元 分转元&#xff0c;分到元相差两位&…

PHP源码:新闻门户系统(附管理后台+前台)

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;新闻门户系统 源码&#xff0c;支持二开&#xff0c;无加密。项目可以扩展为个人博客&#xff0c;和一些社交论坛网址。主要功能&#xff1a;支持文章管理&#xff0c;评论管理&#xff0c;分类管理等…

Kotlin linkedMapOf filterKeys

Kotlin linkedMapOf filterKeys fun main(args: Array<String>) {val lhm linkedMapOf<String, Any>(Pair("name", "phil"), //因为key相同都为 name&#xff0c;被后面的覆盖。Pair("year", 2024),Pair("name", "f…

大语言模型的应用探索AI Agent初探!

前言 大语言模型的应用之一是与大语言模型进行聊天也就是一个ChatBot&#xff0c;这个应用已经很广泛了。 接下来的一个应用就是AI Agent。 AI Agent是人工智能代理&#xff08;Artificial Intelligence Agent&#xff09;的概念&#xff0c;它是一种能够感知环境、进行决策…

消防认证-防火窗

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准&#xff0c;且通过了国家认证认可监督管理委员会审批&#xff0c;获得消防认证资质的认证机构颁发的证书&#xff0c;消防产品具有完好的防火功能&#xff0c;是住房和城乡建设领域验收的重要指标。 二、认证依据…

Websocket在Java中的实践——整合Rabbitmq和STOMP

大纲 Rabbitmq开启STOMP支持 服务端依赖参数参数映射类配置类逻辑处理类 测试测试页面Controller测试案例 在《Websocket在Java中的实践——STOMP通信的最小Demo》一文中&#xff0c;我们使用enableSimpleBroker启用一个内置的内存级消息代理。本文我们将使用Rabbitmq作为消息代…

【Unity2D 2022:Particle System】添加拾取粒子特效

一、创建粒子特效游戏物体 二、修改粒子系统属性 1. 基础属性 &#xff08;1&#xff09;修改发射粒子持续时间&#xff08;Duration&#xff09;为3s &#xff08;2&#xff09;取消勾选循环&#xff08;Looping&#xff09; &#xff08;2&#xff09;修改粒子存在时间&…

面试常考题---128陷阱(详细)

1.问题引入 分别引入了int和Integer变量&#xff0c;并进行比较 int b 128; int b1 128;Integer d 127; Integer d1 127;Integer e 128; Integer e1 128;System.out.println(bb1); System.out.println(dd1); System.out.println(ee1); System.out.println(e.equals(e1)…

刷题(day01)

1、leetcode485.最大连续1的个数 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &#xff0c;所以最大连续 1 的个数是 3.…

昇思第18天打卡|ShuffleNet图像分类

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

张大哥笔记:你一旦开窍,就会发现遍地都是钱

大家有没有发现&#xff0c;穷人总是追逐眼前的利益&#xff0c;总是在追着钱跑&#xff0c;却总是赚不到钱。而富人有着长远的见识&#xff0c;追着问题跑&#xff0c;最后却赚的盆满钵满。 我们听过这样一句话&#xff0c;钱不是赚来的&#xff0c;而是帮助别人解决问题后给你…

Qt/C++编写地图应用/离线地图下载/路径规划/轨迹回放/海量点/坐标转换

一、前言说明 这个地图组件写了很多年了&#xff0c;最初设计的比较粗糙&#xff0c;最开始只是为了满足项目需要&#xff0c;并没有考虑太多拓展性&#xff0c;比如最初都是按照百度地图写死在代码中&#xff0c;经过这几年大量的现场实际应用&#xff0c;以及大量的用户提出…

Django 新增数据 save()方法

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

软件工程(上)

目录 软件过程模型&#xff08;软件开发模型&#xff09; 瀑布模型 原型模型 V模型 构件组装模型 螺旋模型&#xff08;原型瀑布&#xff09; 基于构件的软件工程&#xff08;CBSE&#xff09; 快速应用开发模型&#xff08;RAD&#xff09; 统一过程&#xff08;UP&a…

Linux学习看这一篇就够了,超超超牛的Linux基础入门

引言 小伙伴们&#xff0c;不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统&#xff0c;而且&#xff0c;老生常谈的Linux更是每个计算机人的必修&#xff0c;那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛&#xff0c;巴拉巴拉的&#xff0c;但…

小米rdemi红米ax3000t刷机 20240707最新配套完整程序整理合集

小米rdemi红米ax3000t刷机程序地址&#xff1a; https://www.123pan.com/s/LA1bVv-EOzVv.html 小米路由器SSH密码计算器 https://www.1234f.com/fuwu/ax3000t/ 最新更新地址&#xff1a;https://www.1234f.com/fuwu/openwrt/ 依次输入如下命令&#xff1a; curl -X POST h…

Leetcode 295.数据流的中位数

295.数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: Media…

算法013:水果成篮

水果成篮. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/fruit-into-baskets/ 这道题题目很长&#xff0c;仔细阅读过后&#xff0c;我们其实可以简化成&#xff…