Dữ liệu trong sharded cluster được chia theo chunk — một dải giá trị liên tục của shard key, mặc định 128MB (trước 6.0 là 64MB). Config server giữ bản đồ chunk → shard; mongos tra bản đồ này để định tuyến query.
Vòng đời: chunk lớn quá ngưỡng sẽ split (thao tác chỉ đổi metadata, không di chuyển dữ liệu). Khi số chunk giữa các shard lệch nhau quá ngưỡng, balancer — chạy trên primary của config server replica set — sẽ migrate chunk từ shard nhiều sang shard ít. Từ MongoDB 6.0, balancer cân theo dung lượng dữ liệu thay vì đếm số chunk.
Migration đọc/ghi thật qua mạng nên tốn I/O; vì vậy nên đặt balancer window vào giờ thấp điểm:
db.settings.updateOne(
{ _id: 'balancer' },
{ $set: { activeWindow: { start: '01:00', stop: '05:00' } } },
{ upsert: true }
)Jumbo chunk là chunk vượt ngưỡng nhưng không tách được vì toàn bộ document trong đó có cùng giá trị shard key.
- Balancer bỏ qua nó và đánh dấu
jumbo→ shard chứa nó cứ phình mãi. - Cách xử lý: đây là triệu chứng của shard key độ chọn lọc thấp, sửa gốc bằng
refineCollectionShardKey(thêm field vào key để tách được) hoặcreshardCollection. - Nới
chunkSizechỉ trì hoãn vấn đề.