説明
このドキュメントは、obcdc V3.2.4.5以降、V4.0以前、およびV4.2.1以降のバージョンに適用されます。
obcdcのトラフィック制御機能により、ほとんどのシナリオでobcdcの実行中のメモリ使用量をユーザーの想定範囲内に抑えることができます。memory_limit構成パラメータを使用して、想定されるobcdcのメモリ使用量を調整できます。
obcdc内部には複数のモジュールが存在し、トランザクションデータは各モジュール間で流通します。全体のデータ生産・消費モデルは、いくつかの直列に接続された生産-消費モデルとして大まかに理解できます。トラフィック制御の調整は、データ消費モジュールとログプルモジュールという2つの主要なモジュールのメモリ制御に分けられます。
データ消費モジュールのレート制限
ユーザーの消費が遅い場合、データ消費モジュールのタスク配信進度を制御し、大量のデータが生成されても消費されずにメモリ使用量が過剰になるのを防ぎます。obcdcは、消費キューとリソース回収キューのタスク積み上がり状況から下流の消費速度を判断します。積み上がり比率がpause_redo_dispatch_task_count_threshold/100を超え、かつメモリ使用量がアラートしきい値(memory_limit * memory_usage_warn_threshold/100)に達した場合、または処理中のREDOログが一定のしきい値に達した場合、下流の消費速度が遅いと判断します。
NEED_PAUSE_REDO_DISPATCH=1ログキーワードを使用してlibobcdc.logから消費モジュールのレート制限ログを取得できます。そのREASONフィールドには、具体的なレート制限の理由が記載されています。
ログプルモジュールのレート制限
以下の場合、obcdcはログプルのトラフィック制御をトリガーします:
メモリ使用量がアラートしきい値(memory_limit * memory_usage_warn_threshold/100)に達した場合。
メモリ内のアクティブトランザクションが一定のしきい値を超え、かつデータ消費のトラフィック制御が既にトリガーされている場合。
シーケンスモジュールのタスクが積み上がっている場合。
データ永続化タスクが積み上がっている場合。
NEED_SLOW_DOWN=1ログキーワードを使用してlibobcdc.logからログプルレート制限のログを取得できます。そのREASONフィールドには、具体的なレート制限の理由が記載されています。
上記で言及した一部のパラメータの説明は以下の通りです:
パラメータ |
デフォルト値 |
値の範囲 |
説明 |
|---|---|---|---|
| memory_limit | 8G | [2G, +∞) | 期待されるobcdcのメモリ使用量 |
| memory_usage_warn_threshold | 85 | [0,100] | トラフィック制御検出を開始するメモリ使用量のしきい値 |
| pause_redo_dispatch_task_count_threshold | 80 | [0, 100] | 消費モジュールのレート制限をトリガーするユーザーの消費キューとリソース回収キューの積み上がり比率のしきい値 |
obcdc内部には、より細かい粒度のトラフィック制御調整アルゴリズムと対応するトラフィック制御パラメータがさらに多数存在します。これらのパラメータは設定されたmemory_limitに応じて自動的に調整されますが、ごく一部のシナリオではこれらのパラメータを微調整する必要が生じる場合があります。ここでは参考のためにこれらのパラメータをリストアップします。しかし、ほとんどの場合、これらのパラメータを調整する必要はありません。
トラフィック制御に関連する、obcdcが自動的に調整する構成パラメータは以下の通りです。詳細については、obcdc構成パラメータの説明を参照してください。
redo_dispatcher_memory_limit
extra_redo_dispatch_memory_size
redo_dispatched_memory_limit_exceed_ratio
part_trans_task_active_count_upper_bound
part_trans_task_reusable_count_upper_bound
ready_to_seq_task_upper_bound
storager_task_count_upper_bound
storager_mem_percentage