OceanBase學習之路52|如何透過系統變數進行設定?

老樹樁12發表於2023-01-18

您可以透過系統變數的設定使 OceanBase 資料庫的行為符合您業務的要求。

變數分類

OceanBase 資料庫的系統變數分為全域性變數和 Session 變數:

  • 全域性變數:表示 Global 級別的修改,資料庫同一租戶內的不同使用者共享全域性變數。全域性變數的修改不會隨會話的退出而失效。此外,全域性變數修改後,對當前已開啟的 Session 不生效,需要重新建立 Session 才能生效。

  • Session 變數:表示 Session 級別的修改。當客戶端連線到資料庫後,資料庫會複製全域性變數來自動生成 Session 變數。Session 變數的修改僅對當前 Session 生效。

名稱以 "_" 開頭的變數稱為隱藏變數,如: _primary_zone_entity_count。僅供開發人員在故障排查或緊急運維時使用。

系統變數相關檢視

租戶下的系統變數相關檢視如下:

  • INFORMATION_SCHEMA.GLOBAL_VARIABLES:記錄當前租戶下的全域性變數資訊。

  • INFORMATION_SCHEMA.SESSION_VARIABLES:記錄當前租戶下的 Session 變數資訊。

有關檢視的詳細介紹,請參見《參考指南》中的  系統檢視

設定變數

說明

  • 設定 Session 級別的變數僅對當前 Session 有效,對其他 Session無效。設定 Global 級別的變數對當前 Session 無效,需要重新登入建立新的 Session 才會生效。
  • 設定 Global 級別變數要求當前使用者擁有  SUPER 許可權或  ALTER SYSTEM 許可權。

設定 Session/Global 級別變數的 SQL 語法如下:

SET VARIABLE_NAME = 'VALUE'
SET GLOBAL VARIABLE_NAME = 'VALUE'

透過 SQL 語句設定 Session/Global 級別變數。示例如下:

obclient> SET ob_query_timeout = 20000000;
obclient> SET GLOBAL ob_query_timeout = 20000000;

對於變數值型別為  INT, 且在  SHOW VARIABLES 命令中顯示 ON/OFF 或者 True/False 的變數,可以透過如下任意方式設定 Session/Global 級別變數。示例如下:

SET foreign_key_checks = ON;
SET foreign_key_checks = 1;
SET GLOBAL foreign_key_checks = ON;
SET GLOBAL foreign_key_checks = 1;

對於全域性變數、只讀變數,我們在建立租戶時也能對其進行設定,語法如下:

CREATE TENANT [IF NOT EXISTS] tenant_name 
     [tenant_characteristic_list] [opt_set_sys_var];
tenant_characteristic_list: 
  tenant_characteristic [, tenant_characteristic...]
tenant_characteristic: 
      COMMENT 'string'  
    | {CHARACTER SET | CHARSET} [=] charsetname 
    | COLLATE [=]  collationname
    | REPLICA_NUM [=] num 
    | ZONE_LIST [=] (zone [, zone...]) 
    | PRIMARY_ZONE [=] zone  
    | DEFAULT TABLEGROUP [=] {NULL | tablegroup}
    | RESOURCE_POOL_LIST [=](poolname [, poolname...])
    | LOGONLY_REPLICA_NUM [=] num
    | LOCALITY [=] 'locality description'
opt_set_sys_var:
  {SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...

在建立租戶時,將只讀變數  ob_compatibility_mode 初始化為 'mysql',將全域性變數  ob_tcp_invited_nodes 初始化為 '%'。示例如下:

obclient> CREATE TENANT IF NOT EXISTS test_tenant
charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), 
primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1')
SET ob_compatibility_mode='mysql', ob_tcp_invited_nodes='%';

檢視變數

  • 透過  SHOW VARIABLES 語句檢視。

    檢視 Session/Global 級別變數的 SQL 語法如下:

    SHOW VARIABLES [LIKE 'pattern' | WHERE expr]
    SHOW GLOBAL VARIABLES [LIKE 'pattern' | WHERE expr]

    透過 SQL 語句查詢 Session/Global 級別變數。示例如下:

    obclient> SHOW VARIABLES LIKE 'ob_query_timeout';
    obclient> SHOW VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';
    obclient> SHOW GLOBAL VARIABLES LIKE 'ob_query_timeout';
    obclient> SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';
    obclient> SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE 'ob_query_timeout';
    +------------------+----------+
    | Variable_name    | Value    |
    +------------------+----------+
    | ob_query_timeout | 10000000 |
    +------------------+----------+
    1 row in set (0.00 sec)

    返回結果中的列屬性如下表所示:

    列名 含義
    Variable_name 變數名
    Value 變數值

    說明

    如果連線 sys 租戶後,再透過  ALTER SYSTEM CHANGE TENANT 語句切換到普通租戶,此時查詢的 Session 級別變數仍然是 sys 租戶的 Session 級別的變數。查詢的 Global 級別的變數是切換後普通租戶的 Global 級別變數。有關  ALTER SYSTEM CHANGE TENANT 語句的詳細介紹,請參見《 SQL 語法》。

  • 透過  SELECT 語句,在本租戶相關檢視中檢視 Session/Global 級別變數資訊。SQL 語法如下:

    SELECT * FROM view_name WHERE VARIABLE_NAME = '[var name]'

    示例如下:

    obclient> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';
    obclient> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';複製

更多資訊

更多變數參考資訊,請參見《參考指南》中的  系統變數


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026075/viewspace-2932559/,如需轉載,請註明出處,否則將追究法律責任。

相關文章