システム変数を設定することで、OceanBaseデータベースの動作を業務要件に合わせてカスタマイズできます。
変数の分類
OceanBaseデータベースのシステム変数は、グローバル変数とセッション変数に分類されます:
グローバル変数:グローバルレベルでの変更を示し、データベース内の同一テナント内の異なるユーザー間で共有されます。グローバル変数の変更は、セッションの終了によって無効になることはありません。また、グローバル変数が変更された後、現在開いているセッションには反映されず、新たにセッションを再確立する必要があります。
セッション変数:セッションレベルでの変更を示します。クライアントがデータベースに接続すると、データベースはグローバル変数をコピーして自動的にセッション変数を生成します。セッション変数の変更は、現在のセッションにのみ有効です。
名前が「_」で始まる変数は隠れ変数と呼ばれ、例えば:_primary_zone_entity_count。開発者が障害調査や緊急の運用保守時にのみ使用します。
システム変数関連ビュー
MySQLテナントのシステム変数関連ビューは以下の通りです:
INFORMATION_SCHEMA.GLOBAL_VARIABLES:現在のテナントのグローバル変数情報を記録します。INFORMATION_SCHEMA.SESSION_VARIABLES:現在のテナントのセッション変数情報を記録します。DBA_OB_SYS_VARIABLES:現在のテナントのグローバル変数の変更履歴および変数のデフォルト値情報を記録します。
Oracleテナントのシステム変数関連ビューは以下の通りです:
SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE:現在のテナントのグローバル変数情報を記録します。SYS.TENANT_VIRTUAL_SESSION_VARIABLE:現在のテナントのセッション変数情報を記録します。DBA_OB_SYS_VARIABLES:現在のテナントのグローバル変数の変更履歴および変数のデフォルト値情報を記録します。
ビューの詳細については、「参考ガイド」のシステムビューを参照してください。
変数の設定
説明
- 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 VARIABLE コマンドで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
| PRIMARY_ZONE [=] zone
| RESOURCE_POOL_LIST [=](poolname [, poolname...])
| LOCALITY [=] 'locality description'
opt_set_sys_var:
{SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...
テナント作成時に、読み取り専用変数 ob_compatibility_mode を 'mysql' または 'oracle' に、グローバル変数 ob_tcp_invited_nodes を '%' に初期化します。例:
obclient> CREATE TENANT IF NOT EXISTS test_tenant
charset='utf8mb4', primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1')
SET ob_compatibility_mode='oracle', 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 変数値 SELECTステートメントを使用して、現在のテナント関連ビューでSession/Globalレベルの変数情報を確認します。SQL構文は以下のとおりです:SELECT * FROM view_name WHERE VARIABLE_NAME = '[var name]'Oracleモードでは、
SELECTステートメントを使用して、現在のテナントの対応するビューでSession/Globalレベルの変数情報を確認します。例:obclient> SELECT * FROM SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE WHERE VARIABLE_NAME = 'ob_query_timeout'; obclient> SELECT * FROM SYS.TENANT_VIRTUAL_SESSION_VARIABLE WHERE VARIABLE_NAME = 'ob_query_timeout';MySQLモードでは、
SELECTステートメントを使用して、現在のテナントビューでSession/Globalレベルの変数情報を確認します。例: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';グローバルレベルの変数の変更履歴や変数のデフォルト値を照会する必要がある場合は、以下のステートメントを使用して照会することもできます。
MySQLモード
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_SYS_VARIABLES WHERE NAME='ob_query_timeout';Oracleモード
obclient[SYS] > SELECT * FROM SYS.DBA_OB_SYS_VARIABLES WHERE NAME='ob_query_timeout';
詳細情報
その他の変数の詳細については、『システムリファレンス』のシステム変数を参照してください。