DBAtlas · Атлас эксплуатации баз данных

Проверка выбора ключа шардирования и распределения данных (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, timestamp) направляет все вставки на один шард.

Открыть в DBAtlas →

Связанные материалы