OceanBaseデータベースは、水平スケーリングやデータの動的均衡などのロードバランシング機能を提供します。
水平スケーリング機能とは、サービスノードの数を調整することでサービス能力の拡張・縮小を実現する機能です。例えば、単一のサービスノードから2つのサービスノードに拡張することで、サービス能力を拡大できます。同時に、水平スケーリングではデータの再分散もサポートする必要があります。例えば、単一のサービスノードから2つのサービスノードに拡張する場合、データを2つのサービスノード上に均等に分散させる必要があります。逆に、2つのサービスノードを単一のサービスノードに縮小する場合は、データを単一のサービスノードに再分散させる必要があります。
データの動的均衡機能とは、サービスノードを固定した状態で、データ分布を調整することで各サービスノードの負荷を動的に均衡させる機能です。例えば、テーブルやパーティションの動的な作成・削除に伴い、異なるサービスノード上のサービスのパーティション数に大きな差異が生じ、サービスノードの負荷が不均衡になることがあります。パーティションの動的均衡機能により、パーティションを各サービスノード上に均等に分散させることができ、ロードバランシングを実現できます。
水平スケーリング
OceanBaseデータベースにおけるテナントのストレージ容量および読み書きサービス能力は、主に以下の2つの側面の影響を受けます。
Unit Number、すなわち各Zoneでサービスを提供するUnitの数
Unit Numberを増減することでサービスノードを増減し、読み書きサービスとストレージ容量の水平スケーリングを実現します。
Unit Numberの調整によるテナントのスケーリングの詳細な操作については、Unit Numberの調整によるテナントのスケーリングを参照してください。
Primary Zone、すなわち読み書きサービスを提供するZoneのリスト
最優先順位を持つPrimary Zoneの数を増減することで、読み書きサービスを提供するZoneを増減し、Zone間での読み書きサービスの水平スケーリングを実現します。
Primary Zoneの調整によるテナントのスケーリングの詳細な操作については、Primary Zoneの調整によるテナントのスケーリングを参照してください。
ユーザーはUnit NumberとPrimary Zoneを動的に調整することで、Zone内およびZone間でのテナントの読み書きサービス能力の水平スケーリングを実現できます。ロードバランシング機能は、ユーザーのサービス能力設定に応じて、ログストリームとパーティションの分散を適応的に調整します。
パーティションの均衡化
パーティションの均衡化とは、テーブルやパーティションが動的に変化する状況下で、パーティションの分布を動的に調整することにより、サービスノード上でのパーティション数、パーティションの重み、テーブルグループの重み、およびストレージ容量の均衡を実現することです。
OceanBaseデータベースは、非パーティションテーブル、パーティションテーブル、サブパーティションテーブルなど、さまざまなテーブルタイプをサポートしています。テーブルの種類によって均衡化戦略は異なります。均衡化の効果を説明しやすくするため、OceanBaseデータベースでは異なるテーブルパーティションを均衡化グループに分類しています。各均衡化グループ内では、パーティション数の均衡とストレージ容量の均衡を実現する必要があります。均衡化グループ間には関係はなく、内部では自動的に均衡化グループ間の配置関係を調整します。デフォルト設定では、OceanBaseデータベースのパーティション均衡化戦略は以下のとおりです:
パーティションテーブル:各パーティションテーブルは独立した均衡化グループであり、テーブルのすべてのパーティションが各サービスノードに分散配置されます。
サブパーティションテーブル:各パーティションの下にあるすべてのサブパーティションが独立した均衡化グループを形成し、各パーティションの下にあるすべてのサブパーティションが各サービスノードに分散配置されます。
非パーティションテーブル:すべての非パーティションテーブルを統合して考慮し、1つの均衡化グループを有します。すべての非パーティションテーブルが各サービスノードに分散配置されます。
さらに柔軟に異なるテーブルデータ間の集約と分散の関係を記述するため、OceanBaseデータベースではテーブルグループ(Table Group)の概念を導入しました。
テーブルグループは論理的な概念であり、一連のテーブルの集合を表します。テーブルグループ内のテーブルは物理的に近接しており、関連性のある複数のテーブルはしばしば同じパーティションルールを持ちます。同じルールのパーティションを集約して配置することで、Partition Wise Joinを実現し、読み書き性能を大幅に最適化できます。
OceanBaseデータベースV4.2.0バージョンから、テーブルグループのSHARDING属性が導入され、テーブルグループ内のテーブルデータの集約と分散の関係を制御できるようになりました。テーブルグループのSHARDING属性には3つの値があります:NONE、PARTITION、ADAPTIVE。
ユーザーは自身の利用シナリオに応じて、適切なSHARDING属性値を選択できます。
シナリオ1:テーブルグループ内のすべてのテーブルを集約する
ユーザーが任意のテーブルタイプを1台のマシンに集約し、業務の単一マシンアクセス要件を満たしたい場合、SHARDING = NONEのテーブルグループを使用して、任意のテーブルタイプを集約できます。
SHARDING = NONEのテーブルグループの意味は以下のとおりです:
- 非パーティションテーブル、パーティションテーブル、サブパーティションテーブルを含む、任意のパーティションタイプのテーブルの追加をサポートします。
- テーブルグループ内のすべてのテーブルのすべてのパーティションを集約し、システムはそれらが1台のマシンでスケジュールされることを保証します。
シナリオ2:テーブルグループ内のテーブルデータを水平方向に分散する
単一マシンが単一業務のデータを処理できない場合、ユーザーはデータを複数のマシンに分散して水平スケールアウトを実現したい場合、SHARDING = PARTITIONまたはSHARDING = ADAPTIVEのテーブルグループを使用してこの要件を満たすことができます。
SHARDING = PARTITIONのテーブルグループの意味は以下のとおりです:
パーティションテーブルとサブパーティションテーブルの追加をサポートします。
- パーティション方式の要件:パーティションテーブルのパーティション方式が同じであること。サブパーティションテーブルの場合、システムはパーティションのパーティション方式のみを検証します。したがって、パーティションテーブルとサブパーティションテーブルは共存可能であり、パーティションのパーティション方式が同じであることのみが要求されます。
- パーティションの整合規則:同じパーティション値を持つパーティションを集約します。これには、パーティションテーブルのパーティションと、サブパーティションテーブルの対応するパーティションの下にあるすべてのサブパーティションが含まれます。
テーブルグループ内のすべてのテーブルをパーティションごとに分散します。同時に、サブパーティションテーブルの場合、そのパーティションの下にあるすべてのサブパーティションを集約します。
SHARDING = ADAPTIVEのテーブルグループの意味は以下のとおりです:
追加をサポートするテーブルは、パーティションテーブルまたはサブパーティションテーブルです。
パーティション方式の要件:すべてがパーティションテーブル、またはすべてがサブパーティションテーブルであること。パーティションテーブルの場合、パーティションのパーティション方式が同じであること。サブパーティションテーブルの場合、パーティションとサブパーティションのパーティション方式が同じであること。
パーティションの整合規則:
- パーティションテーブル:パーティション値が同じパーティションを集約します。
- サブパーティションテーブル:パーティション値が同じで、かつサブパーティション値も同じパーティションを集約します。
自動分散方式。テーブルグループ内のすべてのテーブルがパーティションテーブルの場合、パーティションごとに分散します。テーブルグループ内のすべてのテーブルがサブパーティションテーブルの場合、各パーティションの下のサブパーティションごとに分散します。
テーブルグループの詳細および操作については、テーブルグループの作成と管理(MySQLモード)およびテーブルグループの作成と管理(Oracleモード)を参照してください。
テーブルグループの重みに基づく均衡
OceanBaseデータベースのMySQLモードでは、DatabaseをSharding = 'NONE'のテーブルグループにバインドすることで、ユーザーテーブルの集約を実現します。現在、同一Database内のユーザーテーブルの自動集約および複数Database間のユーザーテーブル集約をサポートしています。
Sharding = 'NONE'のテーブルグループに重みを設定することでテーブルグループの重み均衡を実現し、自動集約されたDatabase内のユーザーテーブルを重みに応じて分散配置することができます。テーブルグループの重み均衡は、パーティション均衡(PARTITION_BALANCE)タスクの一つのプロセスであり、ユーザーテナントは手動でトリガーするか、定期的なパーティション均衡タスクの実行を待機することができます。
パーティションの重みに基づく均衡
パーティションテーブル内のパーティションホットスポットやテーブル間のパーティションホットスポットなどの問題をさらに解決するため、OceanBaseデータベースは重みに基づくパーティション均衡戦略を提供しています。パーティションの重みとは、CPU、メモリ、ディスクなどのリソース使用量の相対比率です。パーティションの重み均衡もパーティション均衡(PARTITION_BALANCE)タスクの一つのプロセスであり、ユーザーテナントは手動でトリガーするか、定期的なパーティション均衡タスクの実行を待機することができます。
パーティションの重み均衡アルゴリズムは、パーティションの移動と交換により、各ユーザーログストリーム上のパーティションの重みの合計の分散を可能な限り小さくします。
パーティションの重みが設定されているテーブルのみがパーティションの重み均衡に参加します。重みが設定されていないパーティションは、引き続きパーティション数に基づいて均衡されます。
データロードバランシング関連のパラメータ
-
テナントレベルの構成パラメータ
enable_rebalanceは、システムテナントではテナント間のロードバランシングを行うかどうかを制御し、ユーザーテナントではテナント内のロードバランシングを行うかどうかを制御します。デフォルト値はtrueです。 -
テナントレベルの構成パラメータ
enable_transferは、テナント内で Transfer を行うかどうかを制御します。デフォルト値はtrueです。詳細は以下のとおりです:パラメータ
enable_rebalanceの値がfalseの場合、パラメータenable_transferの値がtrueであってもfalseであっても、システムは自動ロードバランシングを行いません。パラメータ
enable_rebalanceの値がtrueかつenable_transferの値もtrueの場合、テナントのスケーリング時に、システムはテナント内のログストリーム数を自動的に調整し、ログストリームの分割・統合および Transfer などの操作を通じて、テナント内の Leader バランスとパーティションバランスを実現します。パラメータ
enable_rebalanceの値がtrueかつenable_transferの値がfalseの場合、テナントのスケーリング時に、システムは Transfer を行わず、ログストリーム数も変更しません。既存のログストリームを基に、可能な限りログストリームのバランスを保証します。
partition_balance_schedule_interval
テナントレベルの構成パラメータ
partition_balance_schedule_intervalは、パーティションロードバランシングタスクを生成する時間間隔を制御します。enable_rebalanceの値がtrueの場合、システムはpartition_balance_schedule_intervalを時間間隔として設定し、パーティションロードバランシングタスクを自動的にトリガーします。デフォルト値は2hで、取り得る範囲は [0s, +∞) です。0sはパーティションバランシングを無効にすることを意味します。注意
V4.4.x系では、この構成パラメータのデフォルト値はV4.4.1バージョン以降、0sに変更されました。V4.4.1以降のバージョンでは、この構成パラメータを使用してパーティションバランシングを制御することは推奨されません。ユーザーは
DBMS_BALANCE.TRIGGER_PARTITION_BALANCEサブプログラムを呼び出すことで、定期的または手動でパーティションバランシングをトリガーできます。enable_database_sharding_none
テナントレベルの構成パラメータ
enable_database_sharding_noneは、データベース作成時にユーザーテーブルの自動集約を有効にするかどうかを制御します。デフォルト値はFalseで、データベース作成時にはユーザーテーブルの自動集約がデフォルトで有効にならないことを意味します。