TPとAPの混合ワークロードなどのシナリオをサポートするため、OceanBaseデータベースはカラムストアレプリカ(COLUMNSTORE、略称:Cレプリカ)をサポートしています。Cレプリカは独立したZoneにデプロイでき、ユーザーテーブル(レプリケーションテーブルを含む、インデックステーブル、内部テーブル、システムテーブルを除く)はこのレプリカ内でカラムストア形式で保存されます。
このドキュメントでは、テナントのLocality内にカラムストアレプリカ(Cレプリカ)をデプロイする手順と、Cレプリカの使用方法について説明します。
説明
Cレプリカへのアクセスは、独立ODP(ODP V4.3.2+)と弱い読み取り + カラムストアルーティングの構成に依存します。
使用制限と注意事項
使用制限
- CレプリカとFまたはRレプリカの相互変換はサポートされていません。
- 物理復元ではCレプリカの復元はサポートされていません。テナントのローカリティにCレプリカが含まれる場合、復元は失敗します。
デプロイの推奨事項
- V4.3.5 BP1から複数のCレプリカのデプロイがサポートされていますが、最大で3個を推奨します。
- Cレプリカが存在するZoneにはCレプリカのみをデプロイする必要があります。Cレプリカにアクセスする独立ODPはODP V4.3.2以降が必要です。
- プライマリデータベースにCレプリカがデプロイされていない場合、スタンバイデータベースへのCレプリカデプロイは推奨されません。
運用上の注意事項
- CレプリカがデプロイされているクラスタでDDL操作を実行する際、システムリソースの消費は通常増加します。主な理由は、システムが行ストアデータを処理すると同時に、追加でカラムストアデータも処理する必要があり、コミットログ(clog)も対応するレプリカに同期書き込みする必要があるため、CPU、メモリ、ディスク、I/Oなどのリソースにより高い負荷がかかるためです。
- Cレプリカのメジャーコンパクションは通常、F/Rより遅くなります。前回のメジャーコンパクションが完了していない場合、新しいテナントレベルのメジャーコンパクションを開始することはできません。手動でメジャーコンパクションを実行する前に、CDB_OB_ZONE_MAJOR_COMPACTIONおよびDBA_OB_ZONE_MAJOR_COMPACTIONを確認することを推奨します。詳細については、メジャーコンパクション情報の確認を参照してください。
カラムストアレプリカのデプロイ
テナントのローカリティにCレプリカを指定するだけです。一般的な操作は以下の2種類です:
- シナリオA:新規テナント作成時にCレプリカを含める。
- シナリオB:既存テナントにCレプリカを追加する(新しいZone + ローカリティの調整)。
以下のSQL例におけるCPU、メモリ、ディスクなどの数値はあくまで参考用です。実際の負荷とリソース計画に応じて調整してください。
シナリオA:Cレプリカを含むテナントの新規作成
現在、デプロイ済みのクラスタがあり、そのクラスタのデプロイモードが2F1A(2レプリカ + 1アービトレーションサービス)であると仮定します。クラスタ内の3つのZoneはそれぞれzone1、zone2、zone3で、アービトレーションサービスはzone3にデプロイされています。このクラスタ上にCレプリカを含むテナントを作成する手順は以下のとおりです:
説明
Cレプリカはアービトレーション(A)の代わりにはなりません。3 Zoneのシナリオでは、F@zone1,F@zone2,C@zone3を直接設定でき、必ずしも第4のZoneを新規追加する必要はありません。
現在のクラスタネットワークと相互接続可能なマシンを見つけ、そのマシンにCレプリカへのアクセス専用のODPをデプロイします(デプロイとバージョン要件は前節を参照)。
独立ODPは、クラスタネットワークと相互接続可能な任意のホストにデプロイでき、専用の物理サーバーを使用する必要はありません。リソース競合を防ぐため、ODPは単独で1台のマシンにデプロイすることを推奨します。ODPをデプロイする際には、そのバージョンがODP V4.3.2以上である必要があります。ODPのデプロイに関する詳細な操作については、ODPのデプロイを参照してください。
テナントのリソースユニット
unit1を作成します。CREATE RESOURCE UNIT unit1, MAX_CPU=5, MIN_CPU=5, MEMORY_SIZE= '32G', MAX_IOPS=10000, MIN_IOPS=5000, LOG_DISK_SIZE=5301023539200;テナントのリソースプール
pool1を作成し、リソースユニットとしてunit1を指定します。CREATE RESOURCE POOL pool1 UNIT='unit1', UNIT_NUM = 1, ZONE_LIST = ('zone1','zone2','zone3');テナント
tenant_cを作成し、そのローカリティをF@zone1,F@zone2,C@zone3に指定します。CREATE TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,C@zone3', PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes = '%';この例では、作成するテナントはデフォルトでMySQL互換モードのテナントとなります。Oracle互換モードのテナントを作成する場合は、システム変数 ob_compatibility_mode を使用して明示的に
ob_compatibility_mode='oracle'を指定する必要があります。
シナリオB:既存テナントにCレプリカを追加する
現在のクラスタに tenant_c という名前のテナントがあり、そのローカリティは F@zone1,F@zone2,F@zone3、テナントのリソースプールは pool1、ZONE_LIST の範囲は 'zone1','zone2','zone3' です。今、テナントにCレプリカを追加する必要がある場合、zone4 を追加し、テナントのローカリティを F@zone1,F@zone2,F@zone3,C@zone4 に変更することができます。手順は以下のとおりです:
説明
第4ゾーンの新規追加は、Cレプリカを独立したゾーンに配置したいシナリオにのみ適用されます。これはCレプリカをデプロイするための前提条件ではありません。3ゾーントポロジーで分離要件が満たされている場合は、既存のゾーン上に直接Cレプリカを構成することもできます(例:F@zone1,F@zone2,C@zone3)。
クラスタに新しいゾーン zone4 を追加します。ゾーンの追加手順の詳細については、ゾーンの追加を参照してください。
zone4 内にノードを追加します。ノードの追加手順の詳細については、ノードの追加を参照してください。
リソースユニット
unit2を作成します。CREATE RESOURCE UNIT unit2, MAX_CPU=5, MIN_CPU=5, MEMORY_SIZE= '32G', MAX_IOPS=10000, MIN_IOPS=5000, LOG_DISK_SIZE=5301023539200;リソースプール
pool2を作成し、リソースユニットとしてunit2を指定します。CREATE RESOURCE POOL pool2 UNIT = 'unit2', UNIT_NUM = 1, ZONE_LIST = ('zone4');テナントにリソースプール
pool2を追加します。ALTER TENANT tenant_c RESOURCE_POOL_LIST = ('pool1','pool2');注意
RESOURCE_POOL_LISTはテーブル全体の置換の意味です。既存のリソースプールと新規のリソースプールを両方記述する必要があります。('pool2')のみを記述した場合、既存のリソースプールは解除されます。テナントのローカリティを
F@zone1,F@zone2,F@zone3,C@zone4に変更します。ALTER TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,F@zone3,C@zone4';
カラムストアレプリカの使用
独立ODPによるCレプリカへのアクセス
Cレプリカにアクセスする場合、別途ODP(ODP V4.3.2+)をデプロイする必要があります。業務はこのODPを通じてCレプリカにリクエストを送信します。その上で、弱い整合性読み取り、ルーティング、およびinit_sql(一般的にob_route_policy = COLUMN_STORE_ONLYなど)を設定します。完全な例は以下を参照してください。
複数データセンターのシナリオでは、データセンター親和ルーティング(LDC)とカラムストアルーティングの両方が必要な場合は、それぞれを独立した構成次元として扱ってください。関連する一般的なQ&AはAP FAQを参照してください。
ODPのデプロイ
クラスタと相互接続可能なマシンに、Cレプリカへのアクセス専用のODPをデプロイします。バージョンはODP V4.3.2以上である必要があります。手順についてはODPのデプロイを参照してください。
ルーティング転送ポリシーと弱い整合性読み取りの設定
root@proxysysでこのODPにログインします。例:
obclient -uroot@proxysys -h10.10.10.1 -P2883 -p
よく使われるパラメータの説明
以下の表は、カラムストアの弱い整合性読み取りアクセスに関連する一般的なODPパラメータを示しています。
パラメータ |
説明 |
|---|---|
obproxy_read_only |
読み取り専用リクエストの転送など、プロキシの読み取り専用モードに関連する動作を行うかどうかを設定します。弱い整合性読み取りやルーティングと併用する場合は、実際のODPバージョンの説明に従って設定してください。 |
obproxy_read_consistency |
読み取りの一貫性レベルです。例での= 1は通常弱い整合性読み取りを意味します(現在のODPドキュメントに準ずる)。これにより、フォロワーレプリカ/Cレプリカへのルーティングが容易になります。 |
proxy_primary_zone_name |
リクエストを指定されたZoneに優先的にルーティングします(一般的に、既知のCレプリカが存在するZoneがあり、弱い整合性読み取りトラフィックをZoneごとに集約したい場合に使用されます)。 |
init_sql |
接続確立後に自動的に実行されるSQLです。一般的にset @@ob_route_policy = COLUMN_STORE_ONLYを使用して、オプティマイザーにカラムストアパスの生成を指示します。 |
route_target_replica_type |
レプリカタイプに基づいてルーティングします。例えば、ColumnStoreはカラムストアレプリカを選択することを意味します(Zone名の固定に依存しません)。 |
proxy_route_policy |
ルーティングポリシーの列挙です。例えば、TARGET_REPLICA_TYPE_FOLLOWER_ONLYは、弱い整合性読み取り時にフォロワーレプリカのみを選択してルーティングし、フォロワーレプリカが利用不可の場合は接続を切断することを意味します(ODPの説明に準ずる)。 |
シナリオの組み合わせ
組み合わせ |
適用シナリオ |
proxy_primary_zone_name |
route_target_replica_type |
init_sql |
proxy_route_policy(オプション) |
|---|---|---|---|---|---|
| 組み合わせ1 | Cレプリカが存在するZoneが明確になっており、弱い整合性読み取りをZoneごとに集約したい場合 | Cレプリカが存在するZoneに設定します。例えば、'zone4' |
依存しない(デフォルトのままでも可) | set @@ob_route_policy = COLUMN_STORE_ONLY |
必要に応じて、下記の「組み合わせ2」で選択可能な項目を参照してください |
| 組み合わせ2 | レプリカタイプに基づいてカラムストアを選択したい場合で、固定のZone名に縛られたくない場合 | 設定しないか、必要に応じて設定します | 'ColumnStore' |
set @@ob_route_policy = COLUMN_STORE_ONLY |
「フォロワーレプリカのみ、利用不可の場合は切断」などが必要な場合は、TARGET_REPLICA_TYPE_followER_ONLYを設定できます(下記参照) |
組み合わせ1:実行例(弱い整合性読み取り + Zoneに基づいてCレプリカを指す)
-- 読み取り専用と弱い整合性読み取りに関連する項目の設定
obclient> ALTER PROXYCONFIG SET obproxy_read_only = 0;
obclient> ALTER PROXYCONFIG SET obproxy_read_consistency = 1;
-- 弱い整合性読み取りの場合、ODPのすべてのリクエストをCレプリカが存在するZoneにのみルーティングし、同時にCレプリカのクエリ計画を生成するように設定します。例えば、Cレプリカが存在するZoneがzone4の場合。
obclient> ALTER PROXYCONFIG SET proxy_primary_zone_name='zone4';
obclient> ALTER PROXYCONFIG SET init_sql='set @@ob_route_policy = COLUMN_STORE_ONLY';
組み合わせ2:実行例(弱い整合性読み取り + レプリカタイプColumnStore)
-- 読み取り専用および弱い整合性に関するパラメータの設定
obclient> ALTER PROXYCONFIG SET obproxy_read_only = 0;
obclient> ALTER PROXYCONFIG SET obproxy_read_consistency = 1;
-- 弱い整合性の場合、すべてのリクエストをCレプリカにのみルーティングし、同時にCレプリカのクエリプランを生成するように設定します。
obclient> ALTER PROXYCONFIG SET route_target_replica_type = 'ColumnStore';
-- 弱い整合性の場合、すべてのリクエストは従属レプリカのみを選択し、従属レプリカがすべて利用不可の場合は、クライアントとの接続を切断するように設定します。
obclient> ALTER PROXYCONFIG SET init_sql='set @@ob_route_policy = COLUMN_STORE_ONLY';
変更が成功した後、以下のステートメントで確認できます:
obclient> SHOW PROXYCONFIG ALL LIKE 'obproxy_read_only';
obclient> SHOW PROXYCONFIG ALL LIKE 'obproxy_read_consistency';
obclient> SHOW PROXYCONFIG ALL LIKE 'proxy_primary_zone_name';
obclient> SHOW PROXYCONFIG ALL LIKE 'init_sql';
obclient> SHOW PROXYCONFIG ALL LIKE 'route_target_replica_type';
obclient> SHOW PROXYCONFIG ALL LIKE 'proxy_route_policy';
設定が成功すると、OLAP業務はこの 独立ODP を介してアクセスし、クエリをCレプリカに定向します。