Shard-Key-Wahl und Datenverteilung prüfen (getShardDistribution, analyzeShardKey)
MongoDBShardingBefehl
// 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" })Was es tut
Zeigt den prozentualen Anteil der Daten einer Collection auf jedem Shard; analyzeShardKey meldet Kardinalität, häufigste Werte und Monotonie des aktuellen oder eines Kandidaten-Shard-Keys sowie, ob die gesampelten Abfragen einen einzelnen Shard oder alle Shards (Scatter-Gather) ansprechen.
Wann einsetzen
Vor dem Sharden einer neuen Collection, wenn ein Hot Shard oder ungleiches Wachstum auffällt, und vor der Entscheidung für reshardCollection.
Vorsicht
analyzeShardKey braucht einen Index, der den Schlüssel unterstützt, und nimmt bei großen Collections Stichproben von Dokumenten; das erzeugt in Spitzenzeiten zusätzliche Leselast. Solange Query Sampling aktiv ist, werden Stichproben in config.sampledQueries geschrieben; schalte es nach Abschluss der Analyse aus. Ein monoton steigender Schlüssel (ObjectId, Zeitstempel) häuft alle Inserts auf einem Shard an.