OceanBaseデータベースの構成パラメータは、クラスタレベルとテナントレベルに分かれています。OBServerノードはすべての構成パラメータをシリアライズして、作業ディレクトリ内の設定ファイルetc/observer.conf.binに保存します。その後、この作業ディレクトリで起動されるすべてのOBServerノードは、この設定ファイルを読み込みます。
パラメータの確認
一般テナントは、仮想テーブルの形式で現在のテナントの構成パラメータ情報を表示します。これには、クラスタ構成とテナント構成が含まれます。クラスタレベルの構成パラメータはすべて読み取り専用であり、テナントレベルの構成パラメータは、そのプロパティに基づいて変更可能かどうかが決定されます。
一般テナントが
SHOW PARAMETERSステートメントを使用して、自身のテナントレベルの構成パラメータ情報を確認するSQL文は以下のとおりです:SHOW PARAMETERS [SHOW_PARAM_OPTS]システムテナントによるパラメータの確認
システムテナントは
SHOW PARAMETERSステートメントを使用して、クラスタレベルとテナントレベルの構成パラメータ情報を確認できます。また、TENANTキーワードを追加することで、指定されたテナントの構成パラメータを確認することもできます。TENANTが指定されていない場合、システムテナントレベルの構成パラメータ情報が表示されます。これには、クラスタ構成とテナント構成が含まれます。クラスタ構成とテナント構成は、それぞれのプロパティに基づいて変更可能かどうかが決定されます。特定の一般テナントを指定した場合、表示される構成パラメータの内容は一般テナントと完全に一致します。
SQL文は以下のとおりです:
SHOW PARAMETERS [SHOW_PARAM_OPTS] TENANT = tenant_name
構成パラメータの詳細情報は、以下の表に示されています:
| 列名 | 意味 |
|---|---|
| svr_ip | マシンのIPアドレス |
| svr_port | マシン側のポート |
| name | パラメータ名 |
| value | パラメータ値 |
| type | パラメータデータ型 ( NUMBER,STRING,CAPACITY... ) |
| info | パラメータの説明 |
| section | パラメータの分類 |
| scope | パラメータの範囲属性(Tenant|Cluster ) |
| source | 現在の値の出所(Tenant|Cluster|CommandLine|ObAdmin|File ) |
| edit_level | この構成パラメータの変更動作を定義します:
|
| default_value | パラメータのデフォルト値。 |
| isdefault | 現在の値がデフォルト値かどうか。
|
パラメータの変更
説明
クラスタレベルのパラメータは、システムテナントでのみ設定できます。
MySQLモードでは、パラメータを変更するためのSQL構文は以下のとおりです:
ALTER SYSTEM [SET] parameter_name = expression [PARAM_OPTS]
システムテナントでは、TENANT キーワードを指定することで、すべてまたは特定のテナントのパラメータを変更できます。SQL構文は以下のとおりです:
説明
実行が成功すると、指定されたすべてのテナントのパラメータが変更されます。
ALTER SYSTEM [SET] parameter_name = expression [PARAM_OPTS] TENANT = all|all_user|all_meta|tenant_name
説明
all:V4.2.1バージョン以降、tenant = allとtenant = all_userは同じ意味を持ち、どちらもすべてのユーザーテナントに適用されることを表します。all構文は廃止されつつあり、今後の使用は推奨されません。all_user:すべてのユーザーテナントに適用されます。all_meta:すべてのMETAテナントに適用されます。
Oracleモードでは、パラメータを変更するためのSQL構文は以下のとおりです:
ALTER SYSTEM SET parameter_name = expression [PARAM_OPTS]
説明
PARAM_OPTS は、パラメータ設定に使用されるその他の制限条件を表します。例えば、ゾーンの指定やOBServerノードの指定などです。
パラメータストレージ
OBServerノードは永続化時に設定ファイルを使用し、実行時には内部テーブルを維持します。
パラメータには2種類のエンティティテーブルがあります:クラスタレベルのパラメータテーブルと各テナントのテナントレベルのパラメータテーブルです。ユーザーがSQLを実行してパラメータを変更する場合、クラスタレベルのパラメータを変更するとクラスタレベルのパラメータテーブルに書き込まれ、それ以外の場合は対応するテナントレベルのパラメータテーブルに書き込まれます。読み取り時には、クラスタレベルのパラメータはクラスタレベルのパラメータテーブルのみを使用し、テナントレベルのパラメータはテナントレベルのパラメータテーブルから読み取る必要があります。
設定ファイルの形式
ObRecordHeader
[CLUSTER]
CLUSTER_PARAMETER_UPDATES
[TENANT_ID1]
TENANT_ID1_PARAMETER_UPDATES
[TENANT_ID2]
TENANT_ID2_PARAMETER_UPDATES
更新
更新とは、各OBServerノードが必要に応じて内部テーブルまたは設定ファイルから永続化された増分変更をメモリに読み込むプロセスを指します。observerプロセスが起動した直後、設定ファイルからパラメータを読み込みます。通常の運用中にユーザーが意図的にパラメータを変更した場合、OBServerノードは内部テーブルから読み込みます。
設定ファイルからの読み込み
OBServerノードが起動する際、パラメータは優先的に設定ファイルから読み込まれます。パラメータの読み込み順序は以下のとおりです:
コード内容と実行環境に基づいてデフォルト設定を計算します。
設定ファイル内の設定を順次設定します。
テナントレベルのパラメータは、クラスタレベルのパラメータからコピーしたものに、テナントの設定値で上書きします。
コマンドラインパラメータで渡されたパラメータ値に基づいて設定します。
内部テーブルからの読み込み
パラメータの主な更新シナリオは、内部テーブルからの読み込み、つまり既に正常に動作する設定がある状態で、特定のパラメータ値を変更する必要がある場合です。
ALTER SYSTEM SET のSQL文が検証に合格すると、該当するパラメータが存在する内部テーブルが更新され、RSはハートビート方式で各OBServerノードに対し、パラメータ内部テーブルを再読み込んで設定を更新するよう通知します。OBServerノードがRSからの通知を受け取ると、バックグラウンドスレッドが「パラメータ更新」タスクを開始します。このタスクの主な手順は以下のとおりです:
内部テーブル内のパラメータ値を読み取ります。
現在のパラメータをコピーします。
内部テーブル内のパラメータを、コピーしたパラメータのレプリカに順次適用します。
完了後、レプリカのパラメータ値が有効かどうかを確認します。
内部テーブルの値を設定ファイルに永続化します。
パラメータのレプリカを元のパラメータに置き換えます。
テナントレベルのパラメータのプロセスはクラスタレベルのパラメータと同じですが、唯一の違いはパラメータが存在する内部テーブルが異なることです。