インデックスのトラブルシューティング - Amazon DocumentDB

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

インデックスのトラブルシューティング

次のトピックでは、インデックスまたはバックグラウンドインデックスの構築が失敗したときにどうすべきかを説明しています。

インデックスの構築が失敗する

Amazon DocumentDB は、インデックス作成プロセスの一部としてローカルストレージをインスタンス上で使用します。[FreeLocalStorage] CloudWatch メトリクス (CloudWatch -> Metrics -> DocDB -> Instance Metrics) を使用して、このディスクの使用状況をモニタリングできます。インデックスの構築がすべてのローカルディスクを消費して失敗すると、エラーが発生します。Amazon DocumentDB にデータを移行する場合、まずインデックスを作成してからデータを挿入することをお勧めします。移行戦略やインデックスの作成については、Amazon DocumentDB のドキュメントや「オフラインメソッドを使用して、MongoDB から Amazon DocumentDB に移行する」のブログで Amazon DocumentDB への移行 を参照してください。

既存のクラスターでインデックスを作成するときに、インデックスの構築に予想以上の時間がかかる場合、または失敗する場合、まずインスタンスをスケールアップし、インデックスが作成されたらスケールバックして戻すことが推奨されます。Amazon DocumentDB では、 AWS Management Console または を使用してインスタンスサイズを数分ですばやくスケーリングできます AWS CLI。詳細については、「インスタンスクラスの管理」を参照してください。秒単位のインスタンス料金によって、使用したリソースの秒数分のみを支払います。

バックグラウンドインデックスビルドのレイテンシーの問題と失敗

Amazon DocumentDB のバックグラウンドインデックスビルドは、インデックスビルドが開始される前に開始されたプライマリインスタンス上のすべてのクエリの実行が完了するまで開始されません。クエリが長時間実行されている場合、バックグラウンドインデックスビルドはクエリが終了するまでブロックされるため、完了までに予想以上に時間がかかることがあります。コレクションが空であるとしても同様です。

フォアグラウンドインデックスビルドは、同じブロッキング動作を示しません。代わりに、フォアグラウンドインデックスビルドは、インデックスのビルドが完了するまで、コレクションを排他的にロックします。したがって、空のコレクションにインデックスを作成し、長時間実行されるクエリでブロックされないようにするには、フォアグラウンドインデックスビルドを使用することをお勧めします。

注記

Amazon DocumentDB では、任意の時点でコレクションにおいてバックグラウンドインデックスの作成が 1 つのみ許可されます。バックグラウンドインデックスの作成中に createIndex()dropIndex() などの DDL (データ定義言語) オペレーションが発生すると、バックグラウンドインデックスの作成は失敗します。

データベースインデックスの肥大化

Amazon DocumentDB は、複数バージョンの同時実行制御 (MVCC) を使用して同時トランザクションを管理します。ドキュメントを削除または更新しても、以前のバージョンはコレクションとインデックスに「デッド」バージョンとして残ります。ガベージコレクションプロセスは、将来のオペレーションのために、これらのデッドバージョンからスペースを自動的に再利用します。

インデックスの肥大化は、デッドインデックスエントリや古いインデックスエントリの蓄積、またはページ内のフラグメント化により、コレクションのインデックスが大きくなった場合に発生します。レポートされる割合は、将来のインデックスエントリで使用できるインデックススペースの量を表します。この肥大化により、バッファキャッシュとストレージの両方の領域が消費されます。肥大化を削除する場合は、インデックスを再構築する必要があります。

次のコマンドを実行して、インデックスの未使用のストレージを確認します。

db.coll.aggregate({$indexStats:{}});

結果は次のようになります。

{ "name" : "_id_", "key" : { "_id" : 1 }, "host" : "devbox-test.localhost.a2z.com:27317", "size" : NumberLong(827392), "accesses" : { "ops" : NumberLong(40000), "docsRead" : NumberLong(46049), "since" : ISODate("2025-04-03T21:44:51.251Z") }, "cacheStats" : { "blksRead" : NumberLong(264), "blksHit" : NumberLong(140190), "hitRatio" : 99.8121 }, "unusedStorageSize" : { "unusedSizeBytes" : 409600, "unusedSizePercent" : 49.51 } }

コマンドを使用してダウンタイムなしでインデックスを再構築できます。これにはreIndexコレクション全体のスキャンが必要です。「を使用したインデックスのメンテナンス reIndex」を参照してください。