シャードキーの選択とデータ分散を確認する (getShardDistribution、analyzeShardKey)
MongoDBシャーディングコマンド
// Data and document distribution of the collection across shards:
db.getSiblingDB("shop").musteri.getShardDistribution()
// Cardinality, frequency and monotonicity analysis of the current or candidate shard key:
db.adminCommand({ analyzeShardKey: "shop.musteri", key: { musteriId: 1 }, keyCharacteristics: true, readWriteDistribution: false })
// For read/write distribution, enable query sampling first (10 samples per second):
db.adminCommand({ configureQueryAnalyzer: "shop.musteri", mode: "full", samplesPerSecond: 10 })
db.adminCommand({ analyzeShardKey: "shop.musteri", key: { musteriId: 1 }, keyCharacteristics: false, readWriteDistribution: true })
// Turn sampling off when done:
db.adminCommand({ configureQueryAnalyzer: "shop.musteri", mode: "off" })概要
コレクションのデータが各シャードに何パーセントあるかを表示する。analyzeShardKey は、現在または候補のシャードキーのカーディナリティ、最頻値、単調性、およびサンプリングしたクエリが単一シャードを対象とするか全シャード (scatter-gather) を対象とするかを報告する。
使用する場面
新しいコレクションをシャーディングする前、ホットシャードや不均一な増大に気付いた場合、および reshardCollection を決定する前に。
注意
analyzeShardKey にはキーをサポートするインデックスが必要で、大きなコレクションではドキュメントをサンプリングするため、ピーク時には読み取り負荷が増える。クエリサンプリングが有効な間、サンプルは config.sampledQueries に書き込まれるため、分析が終わったら無効にする。単調増加するキー (ObjectId、タイムスタンプ) では、すべての挿入が 1 つのシャードに集中する。