View a markdown version of this page

インデックスの作成 - Amazon DocumentDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

インデックスの作成

Amazon DocumentDB でインデックスを作成するには、いくつかの決定を行う必要があります。

  • どのくらいの速さで完了する必要がありますか?

  • ビルドの実行中にコレクションにアクセスできなくなることはありますか?

  • インスタンスのコンピューティング能力のどれだけをビルドに割り当てることができますか?

  • どのタイプのインデックスを作成すべきですか?

このセクションでは、これらの質問に回答し、インスタンスベースのクラスターコレクションに Amazon DocumentDB インデックスを作成するためのコマンドとモニタリングの例を示します。

ガイドライン

以下のガイドラインには、新しいインデックスを作成する際の基本的な制限と設定のトレードオフが含まれています。

  • Amazon DocumentDB バージョンのサポート: 単一ワーカーインデックス作成はすべての Amazon DocumentDB バージョンでサポートされていますが、マルチワーカーインデックスは Amazon DocumentDB バージョン 4.0 と 5.0 でのみサポートされています。

  • パフォーマンスのトレードオフ: インデックス作成プロセスのワーカー数を増やすと、Amazon DocumentDB データベースのプライマリインスタンスの CPU 使用率と読み取り IO が増加します。新しいインデックスを作成するのに必要なリソースは、実行中のワークロードでは使用できなくなります。

  • Elastic クラスター: Amazon DocumentDB Elastic クラスターでは並列インデックスはサポートされていません。

  • 最大ワーカー: 設定できるワーカーの最大数は、データベースクラスター内のプライマリインスタンスのサイズによって異なります。これは、データベースクラスターのプライマリインスタンスにある vCPU の総数の半分です。たとえば、64 個の vCPU を備えた db.r6g.16xlarge インスタンスでは、最大 32 ワーカーを実行できます。

注記

並列インデックスビルドは、インスタンス 2xlarge 以降でサポートされています。

  • 最小ワーカー: 設定できるワーカーの最小数は 1 です。インスタンスベースのクラスターでのインデックス作成のデフォルト設定は 2 ワーカーです。ただし、「ワーカースレッド」オプションを使用してワーカーの数を 1 つに減らすことができます。これはプロセスが 1 つのワーカーで実行されます。

  • インデックス圧縮: Amazon DocumentDB はインデックス圧縮をサポートしていません。インデックスのデータサイズは、他のオプションを使用したときより大きくなる可能性があります。

  • 複数コレクションのインデックス作成: データベースクラスターのプライマリインスタンスにある vCPU の半分を、複数のコレクションでインデックス作成を実行する設定済みワーカーに使用できます。

  • インデックスタイプ - Amazon DocumentDB でサポートされているインデックスタイプのリストインデックスタイプについては、「」を参照してください。

インデックスビルドのタイプ

インデックスビルドには次の 4 つのタイプがあります。

  • フォアグラウンド: フォアグラウンドインデックスビルドは、インデックスの作成が完了するまで、インデックスが作成されたコレクションに対する他のすべてのデータベースオペレーションをブロックします。Amazon DocumentDB フォアグラウンドビルドは 5 つのステージで構成されています。

  • フォアグラウンド (一意): 単一のドキュメント (一意) フォアグラウンドインデックスビルドは、通常のフォアグラウンドビルドなどの他のデータベースオペレーションをブロックします。基本的なフォアグラウンドビルドとは異なり、単一ビルドでは追加のステージ (ソートキー 2) を使用して重複キーを探します。フォアグラウンド (単一) ビルドは 6 つのステージで構成されます。

  • 背景: バックグラウンドインデックスビルドでは、インデックスの作成中に他のデータベースオペレーションをフォアグラウンドで実行できます。Amazon DocumentDB バックグラウンドビルドは 8 つのステージで構成されています。

  • 背景 (一意): 単一ドキュメント (一意) の背景インデックスビルドでは、インデックスの作成中に他のデータベースオペレーションをフォアグラウンドで実行できます。基本的なバックグラウンドビルドとは異なり、単一ビルドでは追加のステージ (ソートキー 2) を使用して重複キーを探します。バックグラウンド (単一) ビルドは 9 つのステージで構成されます。

デフォルトのインデックスビルドタイプはフォアグラウンドです。

インデックスをバックグラウンドで構築するには、インデックスの作成時に「バックグラウンド」: true パラメータを追加します。

開始方法

コレクションでインデックスの作成を開始するには、createIndexes コマンドを使用します。デフォルトでは、このコマンドは 2 つの並列ワーカーを実行するため、インデックス作成プロセスの速度が 2 倍向上します。

たとえば、次のコマンドプロセスは、ドキュメント内の「user_name」フィールドのインデックスを作成し、インデックス作成プロセスの速度を 4 ワーカーに上げる方法を示しています。

  1. クラスターで 2 つの並列ワーカーを使用して、バックグラウンドでインデックスを作成します。

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "background":true }]})
  2. インデックス作成プロセスの速度を最適化するには、db.runCommand createIndexes コマンドで「ワーカースレッド」オプション (「ワーカー」:<数値>) を使用してワーカーの数を指定できます。

    プロセスの速度を 4 つの並列ワーカーに上げます。

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "workers":4}]})
注記

ワーカーの数が増えるほど、インデックスの作成が速くなります。ただし、ワーカーの数が増えるほど、プライマリインスタンスの vCPU と読み取り IO のロードも大きくなります。他のワークロードを低下させることなく、増加したロードを処理できるよう、クラスターが十分にプロビジョニングされていることを確認してください。

インデックスの進捗状況

インデックス作成プロセスは、初期化、コレクションのスキャン、キーのソート、そして最後にインデックスビルダーによるキーの挿入によって行われます。このプロセスは、フォアグラウンドで実行する場合は最大 6 段階、バックグラウンドで実行する場合は最大 9 段階に分かれます。完了率、スキャンされたストレージブロックの総数、ソートされたキー、挿入されたキーなどのステータスメトリックをステージごとに表示できます。

mongo シェルの db.currentOp() コマンドを使用して、インデックス作成プロセスの進行状況をモニタリングします。最後の段階が 100% 完了すると、すべてのインデックスが正常に作成されたことがわかります。

db.currentOp({"command.createIndexes": { $exists : true } })
注記

インデックス作成の進行状況の表示は、Amazon DocumentDB 5.0 でのみサポートされています。

インデックスビルドステージ

ステージ フォアグラウンド フォアグラウンド (単一) 背景 バックグラウンド (単一)
初期化 1 1 1 1
インデックスの構築: 初期化 2 2 2 2
インデックスの構築: コレクションのスキャン 3 3 3 3
インデックスの構築: ソートキー 1 4 4 4 4
インデックスの構築: ソートキー 2 5 5
インデックスの構築: キーの挿入 5 6 5 6
検証: インデックスのスキャン 6 7
検証: タプルのソート 7 8
検証: コレクションのスキャン 8 9
  • 初期化: createIndex はインデックスビルダーを準備しています。このフェーズは非常に短いはずです。

  • インデックスの構築: 初期化 - インデックスビルダーはインデックスを作成する準備をしています。このフェーズは非常に短いはずです。

  • インデックスの構築: コレクションのスキャン - インデックスビルダーはコレクションスキャンを実行してインデックスキーを収集しています。測定単位は「ブロック」です。

注記

インデックス構築用に複数のワーカーが設定されている場合は、この段階で表示されます。「コレクションのスキャン」ステージは、インデックス構築プロセス中に複数のワーカーを使用する唯一のステージです。その他のすべてのステージには 1 人のワーカーが表示されます。

  • インデックスの構築: ソートキー 1 - インデックスビルダーは収集されたインデックスキーをソートしています。測定単位は「キー」です。

  • インデックスの構築: ソートキー 2 - インデックスビルダーは、収集されたデッドタプルに対応するインデックスキーをソートします。このフェーズは単一インデックスの構築にのみ適用されます。測定単位は「キー」です。

  • インデックスの構築: キーの挿入 - インデックスビルダーは、新しいインデックスにインデックスキーを挿入しています。測定単位は「キー」です。

  • 検証: インデックスのスキャン - createIndex はインデックスをスキャンして、検証が必要なキーを見つけます。測定単位は「ブロック」です。

  • 検証: タプルのソート - createIndex はインデックススキャンフェーズの出力をソートしています。

  • 検証: コレクションのスキャン - createIndex はコレクションをスキャンして、前の 2 つのフェーズで見つかったインデックスキーを検証しています。測定単位は「ブロック」です。

インデックスビルドの出力例

以下の出力例 (フォアグラウンドインデックスビルド) では、インデックス作成のステータスが表示されています。「msg」フィールドは、ビルドのステージと完了率を示すことで、ビルドの進行状況を要約します。「ワーカー」フィールドは、インデックスビルドのそのステージで使用されたワーカーの数を示します。「進行状況」フィールドには、完了率の計算に使用される実際の数値が表示されます。

注記

Amazon DocumentDB バージョン 4.0 では、currentIndexBuildName」、「msg」、および「progress」フィールドはサポートされていません。

{ "inprog" : [{ … "command": { "createIndexes": "test", "indexes": [{ "v": 2, "key": { "user_name": 1 }, "name": "user_name_1" }], "lsid": { "id": UUID("094d0fba-8f41-4373-82c3-7c4c7b5ff13b") }, "$db": "test" }, "currentIndexBuildName": user_name_1, "msg": "Index Build: building index number_1, stage 6/6 building index: 656860/1003520 (keys) 65%", "workers": 1, "progress": { "done": 656861, "total": 1003520 }, … ], "ok" : 1 }

トラブルシューティングリソース

インデックス作成に関する問題のトラブルシューティングについては、次のリソースを参照してください。