インデックス圧力

Elasticsearchにドキュメントをインデックスすることは、メモリとCPUの負荷という形でシステムに負荷をかけます。各インデックス操作には、コーディネート、プライマリ、およびレプリカのステージが含まれます。これらのステージは、クラスター内の複数のノードで実行できます。

インデックス圧力は、インデックス要求などの外部操作や、リカバリやクロスクラスター複製などの内部メカニズムを通じて蓄積される可能性があります。システムに過剰なインデックス作業が導入されると、クラスターが飽和状態になる可能性があります。これにより、検索、クラスターコーディネーション、バックグラウンド処理などの他の操作に悪影響を及ぼす可能性があります。

これらの問題を防ぐために、Elasticsearchは内部でインデックス負荷を監視します。負荷が特定の限界を超えると、新しいインデックス作業は拒否されます。

インデックスステージ

外部インデックス操作は、コーディネート、プライマリ、レプリカの3つのステージを経ます。詳細は基本的な書き込みモデルを参照してください。

メモリ制限

indexing_pressure.memory.limitノード設定は、未処理のインデックス要求に利用可能なバイト数を制限します。この設定のデフォルトはヒープの10%です。

各インデックスステージの開始時に、Elasticsearchはインデックス要求によって消費されたバイト数を計上します。この計上はインデックスステージの終了時にのみ解放されます。これは、上流のステージがすべての下流のステージが完了するまで要求のオーバーヘッドを計上し続けることを意味します。たとえば、コーディネート要求は、プライマリおよびレプリカステージが完了するまで計上され続けます。プライマリ要求は、各同期レプリカが応答するまで計上され続け、必要に応じてレプリカの再試行を可能にします。

ノードは、未処理のコーディネート、プライマリ、およびレプリカのインデックスバイト数が設定された制限を超えると、コーディネートまたはプライマリステージで新しいインデックス作業を拒否し始めます。

ノードは、未処理のレプリカインデックスバイト数が設定された制限の1.5倍を超えると、レプリカステージで新しいインデックス作業を拒否し始めます。この設計は、ノード上のインデックス圧力が高まるにつれて、未処理のレプリカ作業を優先するためにコーディネートおよびプライマリ作業の受け入れを自然に停止することを意味します。

indexing_pressure.memory.limit設定の10%のデフォルト制限は、十分に大きく設定されています。慎重に検討した後にのみ変更するべきです。この制限に寄与するのはインデックス要求のみです。これは、追加のインデックスオーバーヘッド(バッファ、リスナーなど)もヒープスペースを必要とすることを意味します。Elasticsearchの他のコンポーネントもメモリを必要とします。この制限を高く設定しすぎると、他の操作やコンポーネントに対して動作メモリを拒否する可能性があります。

監視

インデックス圧力メトリクスを取得するには、ノード統計APIを使用できます。

インデックス圧力設定

  • indexing_pressure.memory.limit logo cloud
  • インデックス要求によって消費される可能性のある未処理のバイト数。この制限に達するか超えると、ノードは新しいコーディネートおよびプライマリ操作を拒否します。レプリカ操作がこの制限の1.5倍を消費すると、ノードは新しいレプリカ操作を拒否します。デフォルトはヒープの10%です。