如果剛接觸OB,還不清楚什么是參數或者參數(parameters)跟變量(variables)分不清,
可以移步到OB社區博客有美女老師已有分享解讀,詳見 https://open.oceanbase.com/articles/1100275
1、參數分類
參數可以分為兩類,集群參數和租戶參數,重點可以關注以下字段。
- 生效作用域:scope字段
- 生效時機:edit_level字段
- 是否重啟:need_reboot字段
如果對OB有所了解,修改參數時需要重點關注以上3個字段這里以作用域為例,在修改參數前我們須知哪些參數是作用於集群的,哪些參數是作用於租戶的
select scope,count(*) from oceanbase.__all_virtual_sys_parameter_stat group by scope; +---------+----------+ | scope | count(*) | +---------+----------+ | CLUSTER | 286 | | TENANT | 37 | +---------+----------+ 2 rows in set (0.00 sec)
說明:
梳理參數個數的意圖是隨着后續OB的版本越來越多,用戶使用的版本也不盡相同,建議官方能在參數描述里添加一欄,
在哪個版本引入的或者棄用的,在出新版本學習的時候能及時關注到新增或者啟用的參數。
2、參數的查詢
使用show parameters [...] 以下給出幾種示例:
show parameters like '%dir%'; show parameters like 'mysql_port'; show parameters where name like 'mysql_port'; show parameters where name in ('mysql_port','rpc_port'); show parameters like 'sql_area_size' tenant='test_tenant_1';
總之針對參數的查詢方式很靈活,快來根據自己的喜好(需要)查詢了解一下自己環境的參數吧。
3、參數的修改
修改參數其實我們不光需要知道是何級別的(集群/租戶),還需要知道是如何生效的,是否需要重啟,可以重點關注:
具體的修改方式可以參考官方文檔:
show parameters; 或者 select name,value,need_reboot,scope,edit_level from oceanbase.__all_virtual_sys_parameter_stat ; 有幾個重要的字段 need_reboot:表示修改參數后是否需要重啟才能生效。 scope:表示參數是集群的還是租戶的作用域。 edit_level:表示參數是否允許修改,若允許修改修改后是及時生效還是需要重啟才能生效, READONLY:只讀參數不允許修改; STATIC_EFFECTIVE: 可以修改,單需要重啟才能生效,類似於Oracle修改參數的scope=spfile; DYNAMIC_EFFECTIVE: 可以修改,且動態生效,類似於Oracle修改參數的scope=both。
說明:
- 1、如果我們修改了一個集群的參數,修改后會記錄到oceanbase.__all_sys_parameter 系統內部表,可以大概知道集群的參數哪些是非默認的。
- 2、如果我們修改了一個租戶的參數,修改后會記錄到oceanbase.__tenant_parameter 系統內部表,可以大概知道租戶的參數哪些是非默認的。
- 3、sys租戶可以修改集群參數和租戶參數,修改時還可以指定zone或者server來修改對應的。
- 4、普通租戶只能修改租戶自己的參數,修改時可以指定zone或者server來修改對應的,且僅支持指定一個zone或者一個server。
- 5、以上1,2中之所以說大概知道是由於從輸出中看一些內部隱藏的參數也會輸出,而這些本身也沒有做任何修改。
4、參數持久化
修改了參數,重啟后參數還在嗎,OB會對參數做了持久化(內部表持久化和參數文件持久化),其中參數文件持久化的路徑默認是在OB的home_path
對應的目錄下etc/etc2/etc3,這里三個路徑說明參數文件非常重要,可以修改到不同的磁盤文件系統下,做多路徑保存。
MySQL [oceanbase]> select name,value,info from __all_virtual_sys_parameter_stat where name in ('config_additional_dir','data_dir') ; +-----------------------+-----------------------------+------------------------------------------+ | name | value | info | +-----------------------+-----------------------------+------------------------------------------+ | config_additional_dir | etc2;etc3 | additional directories of configure file | | data_dir | /home/data/observer01/store | the directory for the data file | +-----------------------+-----------------------------+------------------------------------------+ 2 rows in set (0.003 sec) [admin@test62 observer01]$ pwd /home/data/observer01 [admin@test62 observer01]$ tree etc* etc ├── observer.config.bin └── observer.config.bin.history etc2 ├── observer.conf.bin └── observer.conf.bin.history etc3 ├── observer.conf.bin └── observer.conf.bin.history 0 directories, 6 files
說明:
- 1.參數文件是二進制文件,不能直接vim或者cat等命令查看/修改,可以使用strings命令查看對應的參數文件。
- 2.對於一個已運行的OB節點,重啟的時候如果沒有指定參數,則讀取參數文件的配置,
- 如果在啟動的命令行指定參數,這指定的這些參數優先級高於參數文件中的, 注意:obd部署的環境
- 如果直接使用alter system 方式修改,不能將參數持久化到observer.conf.bin中。
- 如果是在yaml文件中修改的,是可以持久化下來的。
- 3.observer.conf.bin是最新的參數對應的文件,observer.conf.bin.history是最新的參數修改前對應的文件。
- 4.文件內容【tenant_id】下是對應租戶的參數,其他是集群的參數。
- 5.默認各個OB節點對應的etc/etc2/etc3的參數文件內容都是相同的,除非修改的時候指定zone或者server。
5、內部參數
有些參數直接使用show parameters查詢不到,但又真正存在,這里暫且稱之為內部參數或者隱藏的參數,這類參數命名特點是以下划線開始。
select name,value,scope from __all_virtual_sys_parameter_stat where regexp_like(name,'^_.*');
說明:此類參數平時很少使用,修改前最好跟官方確認一下有無必要或者影響。