一部のビジネスシナリオ(例:リージョンをまたいだディザスタリカバリシナリオ)では、スタンバイデータベースとプライマリデータベース間の帯域幅は希少なリソースとなります。そのため、適切に利用し、適切なスロットリングを行う必要があります。
OceanBaseデータベースは、スタンバイデータベースのスロットリングに使用できる以下の2つのクラスタレベル構成パラメータを提供しています:
standby_fetch_log_bandwidth_limit:スタンバイテナントが存在するクラスタ内で、スタンバイテナントがプライマリテナントまたはソーステナントからログ同期に使用できるすべての帯域幅の合計を設定します。この構成パラメータの値の範囲は [0, 10000G] で、デフォルト値は0です。これは帯域幅を制限しないことを意味します。この構成パラメータは変更後、即時に反映されます。構成パラメータ
standby_fetch_log_bandwidth_limitの値を変更すると、OceanBaseデータベースは内部的に適応型の割り当て戦略を使用し、クラスタ内の複数のOBServerノード間で、個々のノードが使用できる適切な帯域幅の上限値を再配分します。これにより、帯域幅リソースの利用率を最大化します。_server_standby_fetch_log_bandwidth_limit:スタンバイテナントが存在するクラスタ内の単一のOBServerノードで、スタンバイテナントがプライマリテナントまたはソーステナントからログ同期に使用できる帯域幅を設定します。この構成パラメータの値の範囲は [0, 1000G] で、デフォルト値は0です。これはサーバーレベルでのスロットリングを行わないことを意味し、構成パラメータstandby_fetch_log_ratelimitによって割り当てられた帯域幅を使用します。この構成パラメータは変更後、即時に反映されます。構成パラメータ
_server_standby_fetch_log_bandwidth_limitの値を変更すると、スロットリングが設定されたOBServerノードはこのスロットリング値を優先的に使用し、同時にstandby_fetch_log_bandwidth_limitで設定されたスロットリング値は残りのOBServerノードに割り当てられます。つまり、構成パラメータstandby_fetch_log_bandwidth_limitと_server_standby_fetch_log_bandwidth_limitの両方を設定した場合、クラスタで使用可能な総帯域幅は両者の合計となります。
注意事項
スタンバイテナントの帯域幅スロットリング値を極端に小さく設定することは推奨されません。本番環境では、スロットリングの設定がビジネスに与える可能性のある影響を評価する必要があります。例えば、スタンバイデータベースのスロットリングにより、スタンバイデータベースが継続的に遅延したり、ログの途絶えが発生したりする可能性があります。
OceanBaseデータベースでは、名前が「_」で始まる構成パラメータは隠れた構成パラメータと呼ばれ、開発者が障害の調査や緊急の運用保守時にのみ使用します。
設定方法
rootユーザーで、スタンバイテナントが存在するクラスタのsysテナントにログインします。以下のコマンドを実行して、スタンバイテナントのスロットリング値を設定します。
クラスタ全体の利用可能な帯域幅を設定します。
ALTER SYSTEM [SET] standby_fetch_log_bandwidth_limit = value;例:
ALTER SYSTEM SET standby_fetch_log_bandwidth_limit = '50M';単一のOBServerノードで利用可能な帯域幅を設定します。
ALTER SYSTEM [SET] _server_standby_fetch_log_bandwidth_limit = value SERVER [=] 'svr_ip:svr_port';ステートメントの使用方法:
svr_ip:設定対象のOBServerノードのIPアドレス。svr_port:設定対象のOBServerノードのRPCポート番号。- 1つのOBServerノードのみを指定できます。
例:
ALTER SYSTEM SET _server_standby_fetch_log_bandwidth_limit = '30M' SERVER = 'xx.xx.xx.xx:17854';