システム変数の設定により、OceanBaseデータベースの動作を業務要件に合わせることができます。本記事では、テナントシステム変数の変更方法について説明します。
テナントのシステム変数は、SET ステートメントを使用して変更できます。
セッションレベルの変数の設定は、現在のセッションにのみ有効であり、他のセッションには影響しません。
グローバルレベルの変数の設定は、現在のセッションには無効であり、再ログイン後に新しいセッションを確立すると有効になります。
注意
グローバルレベルの変数を設定する場合、MySQLテナントでは現在のユーザーに
SUPER権限またはALTER SYSTEM権限が付与されている必要があります。Oracleテナントでは、現在のユーザーにALTER SYSTEM権限が付与されている必要があります。設定する前に、ご自身の権限を確認してください。ユーザー権限の詳細については、ユーザーと権限の概要 を参照してください。
以下の例で使用されるシステム変数 ob_query_timeout は、SQL文のクエリ操作に対するタイムアウト時間を設定します。単位はマイクロ秒です。ビッグデータのクエリ操作を行う際に、システム変数 ob_query_timeout の値を大きくすることで、クエリのタイムアウトによる文の実行失敗を防ぐことができます。
セッションレベルのシステム変数を変更する
rootユーザーでクラスタのユーザーテナントにログインします。
mq_t1テナントにログインする例を示します:obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -p**** -Aテナントのセッションレベルのシステム変数を照会します。
obclient [(none)]> SHOW VARIABLES LIKE 'ob_query_timeout';結果は次のとおりです:
+------------------+----------+ | Variable_name | Value | +------------------+----------+ | ob_query_timeout | 10000000 | +------------------+----------+ 1 row in setSETを使用して、セッションレベルの変数値を変更します。obclient [oceanbase]> SET ob_query_timeout = 20000000;説明
Oracleモードでは、
ALTER SESSION SET ob_query_timeout = 20000000;ステートメントを使用して、セッションレベルの変数値を変更することもできます。変更結果を確認します。
obclient [(none)]> SHOW VARIABLES WHERE variable_name LIKE 'ob_query_timeout';結果は次のとおりです:
+------------------+----------+ | Variable_name | Value | +------------------+----------+ | ob_query_timeout | 20000000 | +------------------+----------+ 1 row in set
グローバルレベルのシステム変数を変更する
rootユーザーでクラスタのユーザーテナントにログインします。
mq_t1テナントにログインする例を示します:obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -p**** -Aテナントのグローバル変数を照会します。
obclient [(none)]> SHOW GLOBAL VARIABLES WHERE variable_name LIKE 'ob_query_timeout';結果は次のとおりです:
+------------------+----------+ | Variable_name | Value | +------------------+----------+ | ob_query_timeout | 10000000 | +------------------+----------+ 1 row in setSETを使用してグローバル変数の値を変更します。obclient [oceanbase]> SET GLOBAL ob_query_timeout = 20000000;説明
Oracleモードでは、
ALTER SYSTEM SET ob_query_timeout = 20000000;ステートメントを使用してグローバル変数の値を変更することもできます。変更結果を確認します。
obclient [(none)]> SHOW GLOBAL VARIABLES WHERE variable_name LIKE 'ob_query_timeout';結果は次のとおりです:
+------------------+----------+ | Variable_name | Value | +------------------+----------+ | ob_query_timeout | 20000000 | +------------------+----------+ 1 row in set変更が成功した後、ビュー
DBA_OB_SYS_VARIABLESを使用してob_query_timeout変数の詳細な変更履歴とデフォルト値を照会することもできます。ステートメントは以下のとおりです。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_SYS_VARIABLES WHERE NAME='ob_query_timeout';結果は次のとおりです:
+----------------------------+----------------------------+------------------+----------+-----------+-----------+------------------+----------------------------------+---------------+-----------+ | CREATE_TIME | MODIFY_TIME | NAME | VALUE | MIN_VALUE | MAX_VALUE | SCOPE | INFO | DEFAULT_VALUE | ISDEFAULT | +----------------------------+----------------------------+------------------+----------+-----------+-----------+------------------+----------------------------------+---------------+-----------+ | 2024-05-08 14:20:28.885780 | 2024-05-09 15:11:11.654128 | ob_query_timeout | 20000000 | | | GLOBAL | SESSION | Query timeout in microsecond(us) | 10000000 | NO | +----------------------------+----------------------------+------------------+----------+-----------+-----------+------------------+----------------------------------+---------------+-----------+ 1 row in set
ブール型変数の変更
SHOW VARIABLES コマンドでON/OFFとして表示される変数は、以下のいずれかの方法で変数値を設定できます。
SET foreign_key_checks = ON;
SET foreign_key_checks = TRUE;
SET foreign_key_checks = 1;
SET GLOBAL foreign_key_checks = OFF;
SET GLOBAL foreign_key_checks = FALSE;
SET GLOBAL foreign_key_checks = 0;
説明
ON/OFF、TRUE/FALSE、または1/0の3つの方法でブール型変数を設定することは、同じ意味です。
関連ドキュメント
システム変数の詳細については、次を参照してください。