Docs Menu
Docs Home
/
MongoDB Ops Manager
/ / /

レビュー インデックス ランキング

項目一覧

  • Performance Advisor によるインデックスの推奨とランク付け方法
  • インデックス フィールドの順序
  • 推奨インデックスの制限
  • 例: ニューヨーク市の税金データ

Performance Advisor によって提案されるインデックスは、それぞれの Impactスコアの順に並べられます。 Impactは、推奨インデックスによって得られる推定パフォーマンスの向上を示します。

Performance Advisor は、実行に 100ミリ秒を超えるクエリをモニターし、これらのクエリを共通のクエリシェイプにグループ化します。 Performance Advisor は、シェイプにマッチするクエリからの次の集計メトリクスを考慮して、各クエリシェイプの非効率性を計算します。

  • クエリの実行に費やされた時間。

  • スキャンされたドキュメントの数。

  • 返されたドキュメントの数。

推奨インデックスを確立するために、Performance Advisor はこれらのメトリクスを式で使用して、 Impact 、またはそのクエリシェイプに一致するインデックスを作成することで発生するパフォーマンスの向上を計算します。 Performance Advisor は、インデックス固有の操作の実行に費やされた時間と配置内の合計操作レイテンシとを比較します。 Performance Advisor がインデックスを提案する場合、インデックスはImpactスコアによってランク付けされます。

クエリシェイプ内のクエリ操作のタイプは、インデックスの構築に使用されるフィールドの順序に影響します。 一般に、フィールドは 濃度 によってランク付けされます。

次の表は、Performance Advisor がさまざまな操作タイプを相対的な重要性の順にランク付けする方法を示しています。

ランク
操作タイプ
例の演算子
1
等価一致
2
配列クエリ
3
範囲クエリ
4
タイプ クエリ
5
exists
6
他のすべての演算子
7
Sort

Performance Advisor では、次のようなインデックスは 提案されません 。

  • 16を超えるフィールドがあること、および/または

  • フィールドキーとして_idを含めます。

さらに、Performance Advisor は次の場合にのみインデックスを提案します。

  • 影響を受けるクエリの場合、スキャンされたドキュメントと返されたドキュメントの差が500より大きく、

  • 過去24時間で影響を受けるクエリの実行に費やされた時間は、累計で60秒以上でした。

Performance Advisor は、提案を行う前に重複するインデックスの重複を排除します。 たとえば、Performance Advisor が次の潜在的な推奨インデックスを計算する場合を考えてみましょう。

{ a : 1 }
{ a : 1, b : 1 }

{ a : 1 }{ a : 1, b : 1 }のプレフィックスであるため、Performance Advisor は{ a : 1, b : 1 }のみを提案します。 インデックスのプレフィックスの詳細については、「プレフィックス 」を参照してください。

この例では、ニューヨーク市のタックス利用に関する情報、収集と返却時間、自転車距離、利用料金の内訳のフィールドに関する情報を含むcab-dbというデータベースを使用します。 コレクションyellow内の一般的なドキュメントは次のようになります。

{
"_id" : ObjectId("5db9daab0b2a17b7706cd6a3"),
"pickup_datetime" : "2014-06-30 02:09:23",
"dropoff_datetime" : "2014-06-30 02:20:36",
"passenger_count" : 2,
"trip_distance" : 3,
"fare_amount" : 12,
"tip_amount" : 2.6,
"total_amount" : 15.6
}

このコレクションには10万を超えるドキュメントが含まれているため、特定のフィールド データに基づいてクエリを実行する必要があるアプリケーションは、コレクションが適切にインデックス化されていない限り、非常に非効率的な操作を生成することになります。

このアプリケーションの通常のクエリは、特定のドロップオフ時間が 1 つ以上の他のフィールドと組み合わせて含むドキュメントを検索します。 例:

db.yellow.find({ "dropoff_datetime": "2014-06-19 21:45:00",
"passenger_count": 1,
"trip_distance": {"$gt": 3 }
})

Performance Advisor では、パフォーマンスを向上させるために次のインデックスを使用することを推奨しています。

推奨インデックスのスクリーンショット
クリックして拡大します

注意

デフォルトでは、Performance Advisorには、クラスター内のすべてのコレクションのインデックスの推奨事項が表示されます。 推奨事項を特定のコレクションに絞り込むには、 Collectionドロップダウン メニューからコレクションを選択します。

推奨されるインデックスは、パフォーマンスへの影響が大きいものから小さいものの順に記載されています。 この例では、最初に推奨されるインデックスを使用すると、クラスターの全体的な操作レイテンシ時間を50 % 削減すると推定されます。

最初の推奨は 3 つのフィールドのインデックスです。

  • passenger_count

  • dropoff_datetime

  • trip_distance

[ Create Index ] ボタンをクリックして、必要な追加オプションを使用してインデックスを作成します。 Performance Advisor でのインデックスの作成の詳細については、「 推奨インデックスの作成 」を参照してください。

このインデックスを作成すると、データベース エンジンがコレクション全体をスキャンしてクエリに一致するドキュメントを検索する必要がなくなるため、パフォーマンスが向上します。 に示されている形状のクエリでは、インデックス付きコレクションでは50ミリ秒以下が返され、インデックスなしコレクションでは数秒ではありません。

戻る

スロー クエリのしきい値を設定する