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: server1
      ip: 127.0.0.1
  server1:
    mysql_port: 23410
    rpc_port: 23411
    home_path: /data/observer1
    zone: zone1
    data_dir: /data/observer1/data
    redo_dir: /data/observer1/redo
  tag: latest
  include: /data/oceanbase/tools/deploy/obd/observer.include.yaml
  global: 
    devname: lo
    memory_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 配置项参数​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW开发商业软件的多角度分析与注意事项

在使用LabVIEW开发商业软件时&#xff0c;有许多方面需要考虑和注意&#xff0c;包括项目管理、架构设计、性能优化、用户体验、安全性、维护与支持等。以下是从多个角度详细分析在LabVIEW中开发商业软件需要注意的事项。 项目管理 需求分析&#xff1a;确保深入了解客户需求&a…

虚值期权和实值期权的区别?便宜的虚值期权是最好的选择吗?

今天带你了解虚值期权和实值期权的区别&#xff1f;便宜的虚值期权是最好的选择吗&#xff1f;买实值期权和买虚值期权都有各自的优势和风险。实值期权是指行权价格低于标的资产的市场价格&#xff0c;而虚值期权则是指行权价格高于标的资产的市场价格。 实值期权和虚值期权的…

SAPUI5基础知识11 - 组件配置(Component)

1. 背景 组件&#xff08;Component&#xff09;是SAPUI5应用程序中独立且可重用的部件。 SAPUI5提供以下两类组件: faceless组件 (class: sap.ui.core.Component): 无界面组件即没有用户界面相关的元素&#xff0c;用于不需要UI元素编码的场景&#xff1b; UI组件 (class: …

Greenplum(二)【SQL】

前言 Greenplum 的剩余部分主要其实主要就是 DDL 和之前学的 MySQL 不大一样&#xff0c;毕竟 Greenplum 是基于 PostgreSQL 数据库的&#xff0c;不过那些 DML 和 MySQL、Hive 基本上大差不差&#xff0c;所以就没有必要浪费时间了。 1、DDL 1.1、库操作 1.1.1、创建数据库…

p11函数和递归

递归与迭代 求n的阶乘。&#xff08;不考虑溢出&#xff09; int Fac1(int n) {int i0;int ret1;for(i1;i<n;i){ret*i;}return ret; } int main(){//求n的阶乘int n0;int ret0;scanf("%d",&n);retFac1(n);printf("%d\n",ret);return 0; } int Fac…

Qt 进程间通信(一)——QSharedMemory共享内存

QSharedMemory共享内存 序言环境理论—逻辑理解实战—代码读取示例写入示例 序言 讲讲Qt的共享内存吧&#xff0c;巩固下 环境 msvc2022 Qt5.15 参考文档&#xff1a;https://doc.qt.io/qt-5/qsharedmemory.html 理论—逻辑理解 看下面前&#xff0c;你需要将共享内存看成…

【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)

文章目录 定义结构Demo | 代码Subject目标类Observer抽象观察者观察者1 | CPU监听器观察者2 | 内存监听器客户端 | Client 优点适合场景 定义 所谓观察者模式就是你是被观察的那个对象&#xff0c;你爸爸妈妈就是观察者&#xff0c;一天24h盯着你&#xff0c;一旦你不听话&…

NFT 技术在艺术领域的应用

NFT (Non-Fungible Token) 技术在艺术领域有着广泛的应用&#xff0c;为艺术家和艺术品收藏家带来了新的机遇和挑战。以下是 NFT 技术在艺术领域的一些主要应用。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 数字艺术品确权和交…

spring mvc学习

第四章 Spring MVC 第一节 Spring MVC 简介 1. Spring MVC SpringMVC是一个Java 开源框架&#xff0c; 是Spring Framework生态中的一个独立模块&#xff0c;它基于 Spring 实现了Web MVC&#xff08;数据、业务与展现&#xff09;设计模式的请求驱动类型的轻量级Web框架&am…

C#-反射

一、概念 反射&#xff08;Reflection&#xff09;在C#中是一种非常重要的特性&#xff0c;它为开发者提供了在运行时获取和操作关于类型、成员、属性、方法等的详细信息的能力。通过反射&#xff0c;开发者可以在程序运行期间动态地创建对象、调用方法、设置属性值以及进行其…

【免费数字孪生平台】零代码制作智慧农业蔬菜大棚可视化

一&#xff0e;智慧农业的价值 智慧农业&#xff0c;作为农业中的智慧经济形态&#xff0c;是现代科学技术与农业种植深度融合的产物。它通过将物联网、云计算、大数据、人工智能等现代信息技术集成应用于农业生产中&#xff0c;实现了农业生产的无人化、自动化和智能化管理。…

考CISP,不要踩坑的几点建议

当你立志要在信息安全领域闯出一片天&#xff0c;可能多少都会听行内人说&#xff0c;搞本CISP。但这个认证究竟该怎么拿&#xff1f;需要培训吗&#xff1f;培训又是怎么一回事&#xff1f;价格如何&#xff1f;还有&#xff0c;什么时候开始准备最好&#xff1f;这些问题可能…

为什么看起来很低智商的广告比高大上的广告转化效果更好?

大家在刷抖音的时候&#xff0c;是不是总能刷到一些看起来很低质、很尴尬的广告&#xff0c;或者说是一些毫无吸引力的小说剧情&#xff1f;这些广告和内容让人忍不住怀疑&#xff0c;为什么这么低级的广告竟然会有人点击&#xff1f;其实&#xff0c;这背后有着深刻的营销策略…

BJT的结构(晶体管电压/电流+β+晶体管特性曲线/截止与饱和+直流负载线(Q点))+单片机数码管基础

2024-7-8&#xff0c;星期一&#xff0c;20:23&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天没有什么特殊的事情发生&#xff0c;周末休息了两天&#xff0c;周一回来继续学习啦&#xff0c;加油加油&#xff01;&#xff01;&#xff01; 今日完成模电…

HAProxy安装配置详解

HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。   HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上&#xf…

珍藏多年的计算机内核结构大全笔记,掌握计算机工作原理真不难

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

大模型面试笔试常见问题汇总(精心准备)

1 GPT和Bert的区别? 1.模型结构和训练方式 BERT通过掩码语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)任务进行训练: 掩码语言模型(MLM):在输入序列中,BERT随机掩盖一些词语,并要求模型预测这些被掩盖的词语。这使得BERT能够学…

TCP的p2p网络模式

TCP的p2p网络模式 1、tcp连接的状态有以下11种 CLOSED&#xff1a;关闭状态LISTEN&#xff1a;服务端状态&#xff0c;等待客户端发起连接请求SYN_SENT&#xff1a;客户端已发送同步连接请求&#xff0c;等待服务端相应SYN_RECEIVED&#xff1a;服务器收到客户端的SYN请请求&…

214.贪心算法:K次取反后最大化的数组和(力扣)

class Solution { public:int largestSumAfterKNegations(vector<int>& nums, int k) {int sum 0;// 进行k次取反操作while (k > 0){// 对数组进行排序sort(nums.begin(), nums.end());// 将最小的元素取反nums[0] -nums[0];// 减少k的值k--;}// 计算数组的总和…

学习数据库2

在数据库中创建一个表student&#xff0c;用于存储学生信息 查看建表结果 向student表中添加一条新记录 记录中id字段的值为1&#xff0c;name字段的值为"monkey"&#xff0c;grade字段的值为98.5 并查看结果 向student表中添加多条新记录 2,"bob"…