concurrent オプションはクエリ内並列処理を有効にします。このモードでは 、 MongoDB Search はより多くのリソースを使用しますが、個々の クエリのレイテンシ は改善されます。この機能は 専用の検索ノードでのみ使用できます。
concurrent オプションの制限
concurrent オプションでクエリを実行する場合、MongoDB Search は各クエリが同時に実行されることを保証しません。例として、同時クエリが多すぎてキューに入った場合、MongoDB Search はシングルスレッド実行にフォールバックする可能性があります。
構文
concurrent の構文は次のとおりです。
{ "$searchMeta"|"$search": { "index": "<index name>", // optional, defaults to "default" "<operator>": { <operator-specifications> }, "concurrent": true | false, ... }}動作
concurrent ブール値オプションを使用すると、MongoDB Search にセグメント間でのクエリ実行を並列化するようにリクエストできます。これにより、多くの場合、応答時間が短縮されます。concurrent オプションには、次のいずれかの値を設定できます。
true- MongoDB Search にクエリをマルチスレッドで実行するようリクエストfalse- クエリをシングルスレッドで実行する場合(デフォルト)
MongoDB Search では、クエリごとにこの動作を制御して、重いクエリや長時間実行されるクエリのみの同時実行を有効にすることで、競合が最小限に抑えられ、クエリ全体のスループットが向上します。セグメントの量が多いため、同時実行は特に大規模なデータセットで効率的です。
CPU 使用率
MongoDB Search は複数のスレッドで平行クエリを実行するため、クエリがより迅速に完了します。しかし、クエリの実行中は、ユーザーの Search ノード 上で CPU の消費が増えます。大量または短時間のクエリに対して concurrent オプションを有効にすると、サーチ ノードの CPU が飽和し、クエリの全体的なスループットが低下します。CPU への影響を抑えるには、レイテンシの低減によりメリットがある大量で長時間にわたるクエリにのみ concurrent オプションを有効にします。
個々のクエリのCPUコストを測定するには、explainを使用してクエリを実行し、resourceUsageドキュメントのuserTimeMs、systemTimeMs、およびmaxReportingThreadsフィールドを検討します。
配置全体での CPU 使用率をモニターするには、Atlas の クラスターメトリクス と MongoDB Search メトリクスの検討する を表示します。Atlas は、MongoDB Search プロセスが使用する CPU の量を測定する MongoDB Search アラート を trigger することもできます。CPU 使用率が許容できるパフォーマンスの限界に近づいた場合は、サーチノードを増やす。詳細については、検索ノードのサイズ設定とスケーリングに関するヒントを参照してください。
例
サンプル データの sample_mflix.movies コレクションに対する次のクエリを考慮してください。クエリは、titleに期間new yorkが含まれる映画の同時検索を示します。
db.movies.aggregate([ { "$search": { "text": { "path": "title", "query": "new york" }, "concurrent": true } }])