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>^@?T^@ ^@^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
^A2<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]
^A3<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]
^A3<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.pswp.cn/diannao/43141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43141.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源大模型對比

隨著chatgpt誕生&#xff0c;開源大模型的也獲得了突飛猛進的進展&#xff0c;值得關注的是國內本地私有大模型已經在很多真實的場景中落地&#xff0c;比如智能客服。美國的技術研發能力遙遙領先&#xff0c;但是不得不說落地應用這塊是我們的強項。企業使用大模型一般需要考慮…

【面向就業的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;是住房和城鄉建設領域驗收的重要指標。 二、認證依據…

GEE代碼實例教程詳解:NDVI時間序列趨勢分析

簡介 在本篇博客中&#xff0c;我們將使用Google Earth Engine (GEE) 對MODIS NDVI數據進行時間序列趨勢分析。通過分析2001年至2021年的NDVI數據&#xff0c;我們可以了解植被覆蓋度隨時間的變化趨勢。 背景知識 MODIS數據集 MODIS&#xff08;Moderate Resolution Imagin…

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;修改粒子存在時間&…

SQL性能優化策略

發現問題 通過業務監控發現慢SQL或接口響應延遲。利用性能分析工具定位問題。 定位SQL語句 使用監控工具確定影響性能的SQL語句和表。 SQL查詢變慢原因 索引失效&#xff1a;查詢未使用索引或索引效率低。多表連接&#xff1a;JOIN操作導致性能下降。查詢字段過多&#xf…

Monitor結構解讀之EntryQ和WaitSet的區別

EntryQ&#xff08;或_EntryList&#xff09;和WaitSet&#xff08;或_WaitSet&#xff09;在Java的monitor機制中扮演著不同的角色&#xff0c;它們之間的主要區別體現在以下幾個方面&#xff1a; 1. 等待原因和機制 EntryQ&#xff08;或_EntryList&#xff09;&#xff1a…

面試常考題---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.…

Nginx 高效加速策略:動靜分離與緩存詳解

在現代Web開發中&#xff0c;網站性能是衡量用戶體驗的關鍵指標之一。Nginx&#xff0c;以其出色的性能和靈活性&#xff0c;成為眾多網站架構中不可或缺的一部分。本文將深度解析如何利用Nginx實現動靜分離與緩存&#xff0c;從而大幅提升網站加載速度和響應效率。 理解動靜分…

昇思第18天打卡|ShuffleNet圖像分類

ShuffleNet網絡介紹 ShuffleNetV1是曠視科技提出的一種計算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一樣主要應用在移動端&#xff0c;所以模型的設計目標就是利用有限的計算資源來達到最好的模型精度。ShuffleNetV1的設計核心是引入了兩種操作&#xff1a;Pointw…

張大哥筆記:你一旦開竅,就會發現遍地都是錢

大家有沒有發現&#xff0c;窮人總是追逐眼前的利益&#xff0c;總是在追著錢跑&#xff0c;卻總是賺不到錢。而富人有著長遠的見識&#xff0c;追著問題跑&#xff0c;最后卻賺的盆滿缽滿。 我們聽過這樣一句話&#xff0c;錢不是賺來的&#xff0c;而是幫助別人解決問題后給你…

【計算機】同步/異步

同步/異步 在計算機科學和編程中&#xff0c;“同步”&#xff08;Synchronization&#xff09;是一種機制&#xff0c;用于協調不同進程或線程之間的操作&#xff0c;以避免競態條件&#xff08;race conditions&#xff09;、死鎖&#xff08;deadlocks&#xff09;和其他并…