Dans Ubuntu, j'ai créé une collection MongoDB Db contenant 1 million d'enregistrements, et lorsque j'essaie d'exécuter une commande de tri contre, j'obtiens l'erreur suivante:
"$err" : "Runner error: Overflow sort stage buffered data usage of 33555002 bytes exceeds internal limit of 33554432 bytes",
"code" : 17144
S'il vous plaît quelqu'un peut-il décrire comment augmenter la limite interne afin que je puisse exécuter cela et d'autres commandes à grande échelle contre les données?
Réponses:
Cela peut se produire à cause d'un bogue comme SERVER-13611 (alors assurez-vous que vous êtes sur la dernière version), ou parce que vous essayez de trier sur un index clairsemé en 2.6 , mais plus généralement c'est parce que vous essayez simplement de trier aussi de nombreux enregistrements en mémoire sans index.
La limite spécifique que vous atteignez est intentionnelle et est documentée ici - elle ne peut pas être modifiée, vous devez donc réduire l'ensemble des résultats ou utiliser un index, etc. pour effectuer le tri.
Mise à jour (novembre 2014): la prochaine version 2.8 (2.8.0-rc0 au moment de la rédaction de cet article) permet désormais de modifier ce paramètre, comme suit:
La valeur par défaut est 32 Mo (33554432 octets) et doit être ajustée avec soin - les grands tris en mémoire peuvent entraîner l'arrêt de votre base de données (c'est pourquoi il y avait une limite en premier lieu).
la source
J'ai également rencontré le problème lors du tri et de la pagination des enregistrements 200K +. La solution la plus simple semble être d'ajouter un index (pour les attributs que vous triez.
la source