I MongoDB när du går till ett fragmenterat system och du inte ser någon balansering kan det en av flera saker.
-
Du kanske inte har tillräckligt med data för att utlösa balansering. Det var definitivt inte din situation men vissa människor kanske inte inser att med standardstorleken på 64 MB kan det ta ett tag att infoga data innan det finns tillräckligt för att dela upp och balansera en del av det till andra bitar.
-
Balanseraren kanske inte har varit igång - eftersom dina andra samlingar höll på att bli balanserade var det osannolikt i ditt fall såvida inte den här samlingen splittrades senast efter att balanseringen stoppades av någon anledning.
-
Bitarna i din samling kan inte flyttas. Detta kan hända när shard-nyckeln inte är tillräckligt granulerad för att dela upp data i tillräckligt små bitar. Som det visar sig var detta ditt fall eftersom din shard-nyckel visade sig inte vara tillräckligt detaljerad för denna stora samling - du har 105 bitar (vilket förmodligen motsvarar antalet unika job_id-värden) och över 30 GB data. När bitarna är för stora och balanseraren inte kan flytta dem märker den dem som "jumbo" (så att den inte snurrar på sina hjul när de försöker migrera dem).
Hur återhämtar man sig från ett dåligt val av en skärvnyckel? Normalt är det väldigt smärtsamt att ändra shard-nyckeln - eftersom shard-nyckeln är oföränderlig måste du göra en motsvarighet till en fullständig datamigrering för att få in den i en samling med en annan shard-nyckel. Men i ditt fall är samlingen fortfarande på en skärva, så det borde vara relativt enkelt att "avskilja" samlingen och skära om den med en ny skärvnyckel. Eftersom antalet jobb_id är relativt litet skulle jag rekommendera att använda ett vanligt index för att skära på jobb_id, kundkod eftersom du förmodligen frågar om det och jag antar att det alltid är inställt vid tidpunkten för dokumentskapande.