View a markdown version of this page

低使用インデックスと冗長インデックス - Amazon DocumentDB

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

低使用インデックスと冗長インデックス

概要

インデックスはワークロードの全体的なクエリパフォーマンスを向上させますが、コストがかかります。各インデックスはストレージと I/O リソースを消費し、書き込みオペレーションはコレクションのすべてのインデックスを更新する必要があります。データベースに未使用、使用率が低い、または冗長なインデックスが含まれている場合、クラスターにオーバーヘッドが発生し、パフォーマンスが低下します。複数の不要なインデックスは、パフォーマンスの問題、ストレージコストの増加、運用オーバーヘッドの増加を引き起こすアンチパターンを作成します。

最適なインデックス作成シナリオ

  • 未使用のインデックス: 1 回限りのクエリ、または現在のクエリパターンによってアクセスされなくなった以前の製品反復用に作成されたインデックス。コレクションで未使用のインデックスを識別するには、indexStats を使用できます。詳細については、「インデックスの使用状況を分析し、未使用のインデックスを特定する方法」を参照してください。

  • 冗長インデックス: 重複するキーパターンまたは同一のクエリパターンをカバーする複数のインデックス。例: 属性 A の単一キーインデックスは、複合インデックスが属性 A と B の両方をカバーすると冗長になります。複合インデックスは属性 A のクエリのみを処理できるためです。

  • インデックス超過: 実際のクエリパターンやパフォーマンス要件を分析しずに、「念のため」インデックスを作成します。

  • 低カーディナリティインデックス: クエリ最適化の利点を最小限に抑える、いくつかの異なる値 (ブール値フィールド、ステータスフラグなど) を持つフィールドのインデックス。

クラスターパフォーマンスへの影響

  • ストレージと IO: 各インデックスはストレージスペースと IO リソースを消費し、全体的なコストに寄与します。インデックスが未使用または冗長である場合、クラスターの不要なコストを表します。

  • 書き込みパフォーマンスの低下: 挿入、更新、削除オペレーションはインデックスを維持し、リソースを消費するオーバーヘッドを作成する必要があります。未使用または冗長なインデックスは、これらのオペレーションに不要なオーバーヘッドを追加します。

  • メモリと CPU の圧力: インデックスはバッファプールメモリと競合し、ワーキングセットがインスタンスメモリに収まらず、最適ではない BufferCacheHitRatio が発生すると、頻繁にアクセスされるデータを削除する可能性があります。システムは、インデックス構造を維持する CPU リソースも消費します。

インデックス最適化の機会を特定するためのツール

  • インデックスレビューツール:

  • インデックスカーディナリティ検出ツール

ツールキットの収集:

git clone https://github.com/awslabs/amazon-documentdb-tools.git

1. インデックスレビューツール

インデックスレビューツールは、すべてのコレクションとインデックスを分析して、インデックスとその使用パターンのリストを提供し、Amazon DocumentDB クラスター上の冗長インデックスを識別します。包括的な分析のために、このツールをすべてのクラスターインスタンスで実行します。詳細については、「インデックスレビューツール」を参照してください。

使用:

cd performance/index-review/ python3 index-review.py --server-alias <server-alias> --uri <mongodb-uri>

出力ファイル

  • {server-alias}-collections.csv: コレクションレベルの統計

  • {server-alias}-indexes.csv: 詳細なインデックス使用状況メトリクス

  • {server-alias}-{timestamp}-index-review.json: 詳細な分析のための未加工データ

注記

クラスター内の各インスタンスに対して独立したエイリアスを使用して を実行し、各インスタンスから統計を生成し、ツールを実行して累積分析を取得します。

例: python3 index-review.py --files "{server-alias}-{timestamp}-index-review.json, {server-alias}-{timestamp}-index-review.json" --server-alias full-review

2. インデックスカーディナリティ検出ツール

このツールは、クエリのパフォーマンスに非効率的な低カーディナリティのインデックスを識別します。

使用方法

cd performance/index-cardinality-detection/ python3 detect-cardinality.py --uri <mongodb-uri>

パラメータ

  • --threshold: カーディナリティしきい値の割合 (デフォルト: 1%)

  • --sample-count: サンプルするドキュメントの数 (デフォルト: 100,000)

  • --max-collections: データベースごとにスキャンする最大コレクション数 (デフォルト: 100)

詳細については、https://aws.amazon.com/blogs/database/detect-and-fix-low-cardinality-indexes-in-amazon-documentdb/ を参照してください。

修復戦略

1. 未使用および冗長なインデックスの削除

// Example: Drop unused index db.collection.dropIndex("unused_index_name")
注記

すべての利害関係者と話し合い、パフォーマンスをテストしない限り、インデックスを削除しないでください。

2。低カーディナリティインデックスの最適化

  • フィルターで部分インデックスを使用する

  • 単一の低カーディナリティインデックスを複合インデックスに変換する