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データベースはテーブルグループの SHARDING 属性を導入しました。V4.4.2バージョンでは、V4.4.2 BP1バージョンから、テーブルグループは SCOPE 属性もサポートするようになりました。テーブルグループ内のパーティションの分散方法は、SHARDING 属性と SCOPE 属性によって共同で決定されます。その中で、SHARDING 属性はテーブルグループ内の各テーブル間の対応するパーティションの集約方法を決定し、集約された一連のパーティションをパーティショングループ(Partition Group)と呼び、これが分散の最小単位です。SCOPE 属性は、テーブルグループ内のすべての集約後のPartition Groupの分散範囲を決定します。
テーブルグループの SHARDING 属性には NONE、PARTITION、ADAPTIVE の3つの値があります。それぞれの意味は以下のとおりです:
SHARDING = NONE:テーブルグループ内の各テーブルのパーティション方式に制限がなく、テーブル間でパーティションは集約されません。注意
V4.4.2バージョンでは、V4.4.2 BP1バージョン以前は、
SHARDING = NONEのテーブルグループ内のテーブルのすべてのパーティションは同一のログストリーム上に分散されませんでした。しかし、V4.4.2 BP1バージョン以降は、テーブルグループ内のテーブルのすべてのパーティションが分散されるかどうかは、テーブルグループのSCOPE属性にも依存します。パーティションテーブルの場合、各パーティションが独立したPartition Groupとなります。
サブパーティションテーブルの場合、各パーティションとサブパーティションが独立したPartition Groupとなります。
非パーティションテーブルの場合、テーブル全体が1つのPartition Groupとなります。
グローバルインデックステーブルについては、
SHARDING = NONEのテーブルグループ内で、テーブルのグローバルインデックステーブルは自動的にテーブルグループにバインドされます。グローバル非パーティションインデックステーブル全体が1つのPartition Groupとして、グローバルパーティションインデックステーブルの各パーティションが独立したPartition Groupとして扱われます。
SHARDING = PARTITION:テーブルグループ全体が1つの均衡したレンタルとなります。同一のパーティションインデックスを持つパーティションは同じPartition Groupに集約されます。SHARDING = ADAPTIVE:全てがパーティションテーブルの場合、テーブルグループ全体が1つの均衡グループとなります。同一のパーティションインデックスを持つパーティションは同じPartition Groupに集約されます。
全てがサブパーティションテーブルの場合、同一のパーティションインデックスを持つパーティションが1つの均衡グループとなります。均衡グループ内では、同一のサブパーティションインデックスを持つサブパーティションが同じPartition Groupに集約されます。
テーブルグループの SCOPE プロパティには SERVER、ZONE、CLUSTER の3つの値があります。それぞれの意味は以下の通りです:
SCOPE = SERVER:すべてのパーティショングループ(Partition Group)のリーダーが同一ノード上に配置されます。SCOPE = ZONE:すべてのパーティショングループ(Partition Group)のリーダーが同一ゾーン内の異なるノードに分散配置されます。SCOPE = CLUSTER:すべてのパーティショングループ(Partition Group)のリーダーがクラスタ内の異なるノードに分散配置されます。
テーブルグループの SHARDING プロパティと SCOPE プロパティの組み合わせによるパーティションの分散方法は、次の表の通りです。
SHARDING / SCOPEプロパティ値 |
SERVER |
ZONE |
CLUSTER |
|---|---|---|---|
| NONE | テーブルグループ内のすべてのパーティションが同一ノード上に集約される(パーティションの分散方法は SCOPE プロパティが以前のバージョンの SHARDING = NONE をサポートする場合と同等)。 |
テーブルグループ内のすべてのパーティションが特定のゾーン内に均等に分散される | テーブルグループ内のすべてのパーティションが各ノードに均等に分散される |
| PARTITION | サポートされていない | 現在はサポートされていない | パーティション単位で集約され、各パーティショングループはランダムに分散される。(パーティションの分散方法は SCOPE プロパティが以前のバージョンの SHARDING = PARTITION をサポートする場合と同等)。 |
| ADAPTIVE | サポートされていない | 現在はサポートされていない |
パーティションの分散方法は |
テーブルグループの詳細および操作については、テーブルグループの作成と管理(MySQLモード)およびテーブルグループの作成と管理(Oracleモード)を参照してください。
テーブルグループの重みに基づく均衡
OceanBaseデータベースのMySQLモードでは、データベースを Sharding = 'NONE' のテーブルグループにバインドすることで、ユーザーテーブルの集約を実現します。現在、同一データベース内のユーザーテーブルの自動集約と、複数データベース間のユーザーテーブル集約をサポートしています。
Sharding = 'NONE' のテーブルグループに重みを設定することで、テーブルグループの重み均衡を実現し、テーブルグループ内のテーブルを重みに応じて分散させることができます。ただし、V4.4.2バージョンでは、V4.4.2 BP1以降、Sharding = 'NONE' のテーブルグループに対しては、SCOPE = ZONE、SCOPE = 'SERVER' のテーブルグループにのみ重み設定が可能です。
テーブルグループの重み均衡は、パーティション均衡(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は、Database作成時にユーザーテーブルの自動集約を有効にするかどうかを制御します。デフォルト値はFalseで、Database作成時にはユーザーテーブルの自動集約がデフォルトで有効にならないことを意味します。 zone_disk_balance_tolerance_percentage
テナントレベルの構成パラメータ
zone_disk_balance_tolerance_percentageは、ゾーン間のテーブルグループディスクバランシングアルゴリズムが不均衡に対して許容する許容度を制御します。ディスク使用量が最も多いゾーンと最も少ないゾーンの差が、最大ゾーンのディスク使用量にこの割合を掛けた値を超えた場合にのみ、ゾーン間のディスクバランシングがトリガーされます。デフォルト値は10です。