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.pswp.cn/pingmian/81048.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81048.shtml
英文地址,請注明出處:http://en.pswp.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;而且對…