Pourquoi mes requêtes MongoDB sont-elles vraiment, vraiment lentes?

9

J'ai hérité d'un grand serveur MongoDB au travail et j'ai été chargé de comprendre pourquoi les requêtes exécutées contre lui étaient si lentes. La base de données contient des tonnes et des tonnes d'enregistrements (de l'ordre de 10 ^ 9) et occupe environ 300 Gio. Au début, je pensais que le nombre brut d'enregistrements était peut-être le coupable, alors j'ai mis en place des indices sur les champs appropriés. Cela a grandement aidé pour les requêtes qui recherchaient des critères qui se trouvaient dans la base de données, mais cela prendrait de 80 à 90 minutes pour les requêtes où il n'y aurait pas de correspondance. Avez-vous des idées sur la façon de résoudre ce problème?

Mark LeMoine
la source
1
Quelle version de MongoDB? Quel matériel? Combien d'éclats?
Rob Olmos
2
Oh, la douleur du problème hérité ...
gWaldo

Réponses:

5

Il semble que vous manquiez un index important, d'autant plus que la requête sans correspondance prend beaucoup plus de temps qu'une requête avec des correspondances. De quel type de requête s'agit-il? Peut-être avez-vous besoin d'un indice composé? Utilisez-vous wheredans le cadre de la requête?

Je ne suis pas un expert en MongoDB, mais 80-90 minutes est absolument anormal. Je ne sais pas à quoi ressemble MongoDB pour Arenstar, mais il a été démontré qu'il gère des milliards de documents (téraoctets de données) .

Alexei Boronine
la source
4

C'est peut-être trop tard pour une réponse, mais j'ai pensé que cela valait la peine d'être mentionné. Il existe des outils comme mongostat qui peuvent être utilisés pour voir ce qui se passe réellement. Trop d'index manqués, trop de défauts de page. Si vous exécutez des opérations de lecture et d'écriture simultanées, vous devez également rechercher le pourcentage de verrouillage. 300 Go, ce n'est pas énorme pour mongodb. Cela peut facilement aller bien au-delà.

Autres commandes utiles:

    db.stats();
    db.currentOp();
awsiv
la source
-5

MongoDb est à l'échelle du Web .. Désolé de le dire ..

Aucune correspondance ne prendra probablement un certain temps sur la base peut-être d'un balayage de portée ???

Je voudrais le décomposer .. Mongo ne ressemble pas à une base de données pour gérer 300 Go, et n'est probablement pas assez mature pour l'instant pour savoir comment il agit avec de grandes quantités de données ..

Pour quelle raison utilisez-vous Mongo ??

Arenstar
la source
C'était juste ce que le gars avant moi (qui est parti) était à l'aise d'utiliser et l'avait implémenté, malheureusement. Du bon côté, nous sommes ouverts à de nouvelles suggestions DB.
Mark LeMoine
Quelles données stockez-vous ??? son tout sur votre infrastructure de données
Arenstar
Il s'agit de petits enregistrements de fichier journal, chacun contenant un ID (int), un nom de serveur (chaîne), une charge utile de message (chaîne), une date et une adresse IP. J'ai actuellement des indices sur l'ID et le nom du serveur.
Mark LeMoine
8
il y a une tonne d'entreprises qui utilisent mongodb. 300g est faisable, demandez aux gens de foursquare, wordnik et boxedice qui ont une tonne de données. si quoi que ce soit, les index sont incorrects. Je les vérifierais avant d'extraire la base de données et de la remplacer par autre chose.
luckytaxi
1
@Arenstar: Que signifie échelle Web? Et en quoi est-elle différente d'une autre échelle?
Joshua Partogi