MongoDB Search プロセス(mongot)は、固定実行プールでクエリを実行します。クエリが プロセスの実行よりも速く到達した場合、Atlas は過剰なクエリを一度に実行中のではなく、認可制御キューに保持します。検索ロード シェルは、このキューを制御します。これにより、検索プロセスがメモリ枯渇し、プロセスが完了できる以上の同時作業を受け入れた場合に発生するレイテンシの枯渇から保護されます。
検索負荷シェルは、$search クエリと $vectorSearch クエリの両方に適用されます。 MongoDB 8.0、8.3、9.0 以降を実行中クラスターで使用でき、Atlas はMongoDB 9.0を実行中クラスターでデフォルトで有効になっています。以降に更新します。
検索プロセスが 実行キャパシティーに達すると、Atlas は受信クエリをキューに入れます。キューに入れられたクエリはキャパシティーが解放されたときに実行されるため、正常に完了しますが、レイテンシは通常よりも高くなります。到達率がプロセスが作業を許可できる速度を下回るまで、レイテンシは増加したままになります。
いつでも、クエリは実行プールで実行中いるか、許可制御キューで待機しているか、拒否されます。キューがいっぱいになった場合にのみ拒否が発生します。
検索ロード シャーディングでは、検索プロセスが同時に実行されるクエリの数は変更されません。許可制御キューにキャパシティー制限があるかどうかのみが変更されます。
無制限キューを使用すると、Atlas は超過分を超えるすべてのクエリをキューに入れます。クエリは常に実行されますが、持続的な過負荷によりレイテンシが増加します。
境界のあるキューを使用しても、Atlas は超過分なクエリを引き続きキューに入れますが、キャパシティー制限までです。キューがいっぱいになると、Atlas は すべてのクライアントにレイテンシを追加するのではなく、それ以上のクエリを直ちに拒否します。
Atlas は実行プールのサイズと境界のあるキューのキャパシティーを内部的に設定し、これらの制限はいつでも変更できます。
Atlas がクエリの拒否を開始する時点で、過負荷はすでに Atlas が許可するクエリのレイテンシを発生させています。排除により過剰な負荷が軽減され、レイテンシがこれ以上低下するのを防止できます。また、検索プロセスが完全に失敗するのではなく、検索プロセスを応答性を維持します。
拒否されたクエリ エラー
認可制御キューがいっぱいになったために Atlas がクエリを拒否した場合、クエリは次のエラーで失敗します。
フィールド | 値 |
|---|---|
エラー コード |
|
コード名 |
|
エラー ラベル |
|
検索ロード シェルをサポートするすべてのバージョンがこのエラーを返すため、アプリケーションは1 つのエラー契約に依存できます。
重要
拒否されたクエリは再試行できません
489 エラーには RetryableError ラベルは付けられません。 MongoDBドライバーも mongod も拒否されたクエリを自動的に再試行しません。アプリケーションが応答方法を決定する必要があります。
拒否された場合、検索プロセスはすでに飽和していることを意味します。再試行すると、負荷が分散できないプロセスにすぐに負荷がかかるため、過負荷が延長され、拒否回数が増加します。 489 エラーに応答するには、次のプラクティスを適用します。
エラー メッセージ テキストと一致するのではなく、
SystemOverloadedErrorラベルをキャッチします。クエリを再度送信する前に待ちます。同時実行クライアントがお互いのステップで再試行しないようにするには、 jutter で指数バックオフを使用します。
試行回数を制限します。無期限に再試行するのではなく、デグレードされた結果またはエラーをエンドユーザーに表示します。
拒否された状態が維持されている間は、アプリケーションが検索クエリを送信するレートを減らします。クライアントの同時実行性を下げると、過負荷が短縮されます。
持続的な拒否を一時的な障害ではなくキャパシティーシグナルとして扱い、 検索ワークロードを増やすまたは最適化します 。
検索の過負荷を監視および削減
Atlas は拒否される前にキューを報告するため、アクションの時間を取れます。次のシグナルを使用します。
Search Process Throttlingメトリクスは、検索プロセスがキューのしきい値を超えました。継続的なゼロ以外の値は、プロセスが許可するよりも早く作業が到達することを意味します。このメトリクスを表示するには、 「 MongoDB Search メトリクスの確認 」を参照してください。
MongoDB Search: Search Process is Overloadedアラートは、条件が5 分間続くと起動します。このアラートを解決するには、 「 MongoDB Search の問題の修正 」を参照してください。
検索プロセスに到達する負荷を軽減するには、次のアクションを実行します。
検索ノードを配置して検索ワークロードを分離するか、より多くの vCPU を備えた検索ノード階層にアップグレードします。
クエリをバーストで送信するのではなく、時間の経過とともに分散する。
クエリを最適化します。フィルターを追加し、先頭のワイルドカードや深くネストされた句を減らし、必要なフィールドのみを返します。
クエリ負荷シャーディングの設定
クラスターごとに 検索ロード ヘッジ を構成します。設定では、次の状態が受け入れられます。
状態 | API Value | 説明 |
|---|---|---|
Atlas マネージド | 上書きなし | Atlas は、クラスターが実行するMongoDB のバージョンに基づいて状態を選択します。 Atlas は、 MongoDB 8.0 と 8.3 ではこの状態を Off に、 MongoDB 9.0 以降では On に解決します。 |
On |
| 認可制御キューには境界があります。 Atlas は超過分クエリをキャパシティー制限までキューで処理し、キューがいっぱいになると |
オフ |
| 認可制御のキューは無制限です。 Atlas は過剰なクエリをすべてキューに入れ、クエリを拒否しません。 |
状態を変更するには、Atlas UIまたは Atlas 管理APIを使用します。