シャードキーのトラブルシューティング
理想的なシャードキーを使用すると、MongoDB は一般的なクエリ パターンにしながら、ドキュメントをクラスター全体に均等に分散できます。 シャードキーが最適でないと、次の問題が発生する可能性があります。
以下では、シャードキーに関する一般的な問題とその解決方法について詳しく説明しています。
ジャンボチャンク
ジャンボ チャンクが表示されている場合は、シャードキーの濃度が不十分であるか、シャードキー値の頻度が不均一に分散されています。
シャードキーの 濃度を高めたり、シャードキー値の分散を変更したりするには、次の操作を実行します。
コレクションを再シャーディングすべきか、シャードキーを改善すべきかについては、シャードキーの変更を参照してください。
シャードキー値の分散のみを変更するには、ハッシュされたシャーディング を使用してデータをより均等に分散することを検討してください。
シャードキーの選択に関するアドバイスについては、「 シャードキーの選択 」を参照してください。
不均一な負荷分散
クラスターの負荷分散が不均一な場合は、シャードキーが単調に増加している かどうかを確認してください。 単調に増加するフィールドであるシャードキーの場合、読み取りおよび書込みの分散が不均一になります。
order_id
フィールドでシャーディングされている orders
コレクションを考えてみましょう。 order_id
は、注文ごとに 1 ずつ増加する整数です。
新しいドキュメントは通常、同じシャードとチャンクに書き込まれます。 書き込みを受け取るシャードとチャンクは、ホットシャードとホットチャンクと呼ばれます。 ホットシャードは時間の経過とともに変化します。 チャンクが分割されると、ホット チャンクは別のシャードに移動され、データ分散が最適化されます。
ユーザーが最近の注文を操作する可能性が高く、すべてが同じシャードにある場合、最近の注文を含むシャードがほとんどのトラフィックを受信します。
単調に増加するシャードキーがある場合は、 コレクションの再シャーディング を検討してください。 シャードキーの選択に関するアドバイスについては、「 シャードキーの選択 」を参照してください。
データモデルで単調に変化するキーをシャーディングする必要がある場合は、ハッシュされたシャーディングの使用を検討してください。
時間の経過とともにクエリ パフォーマンスが低下
時間の経過とともにクエリ パフォーマンスが低下していることに気付いた場合は、クラスターがスキャッター ギャザー クエリを実行している可能性があります。
クラスターがスキャッター ギャザー クエリを実行しているかどうかを評価するには、最も一般的なクエリにシャードキーが含まれているかどうかを確認します。
クエリにシャードキーを含める場合は、シャードキーがハッシュされているかどうかを確認してください。 ハッシュされたシャーディングでは、ドキュメントは シャードキー フィールド値の昇順または降順で保存されません。 昇順または降順で保存されていないデータのシャードキー値に対して範囲ベースのクエリを実行すると、スキャッター ギャザー クエリのパフォーマンスが低下します。 シャードキーに基づく範囲ベースのクエリが一般的なアクセス パターンである場合は、コレクションの 再シャーディング を検討してください。
最も一般的なクエリにシャードキーを含めない場合は、 コレクションを再シャーディングすることでパフォーマンスが向上する可能性があります。 シャードキーの選択に関するアドバイスについては、「 シャードキーの選択 」を参照してください。