Perché le mie query MongoDB sono molto, molto lente?


9

Ho ereditato un grande server MongoDB al lavoro e mi è stato assegnato il compito di capire perché le query eseguite su di esso sono così lente. Il DB contiene tonnellate e tonnellate di record (nell'ordine di 10 ^ 9) e occupa circa 300 GiB. All'inizio, ho pensato che il numero grezzo di record potesse essere stato il colpevole, quindi ho impostato indici su campi appropriati. È stato di grande aiuto per le query che cercavano i criteri presenti nel DB, ma richiederebbe da 80 a 90 minuti per le query in cui non vi sarebbero state corrispondenze. Qualche idea su come affrontare questo?


1
Quale versione di MongoDB? Quale hardware? Quanti frammenti?
Rob Olmos,

2
Oh, il dolore del problema ereditato ...
gWaldo

Risposte:


5

Sembra che manchi un indice importante, soprattutto perché la query senza corrispondenze impiega molto più tempo di una query con corrispondenze. Che tipo di query è? Forse hai bisogno di un indice composto? Stai usando wherecome parte della query?

Non sono un esperto di MongoDB, ma 80-90 minuti è assolutamente anormale. Non so che aspetto abbia MongoDB per Arenstar, ma è stato dimostrato che gestisce miliardi di documenti (terabyte di dati) .


4

Potrebbe essere troppo tardi per una risposta, ma ho pensato che valesse la pena menzionarlo. Esistono strumenti come mongostat che possono essere utilizzati per vedere cosa sta realmente succedendo. Troppi errori di indice, troppi errori di pagina. Se si eseguono operazioni di lettura e scrittura simultanee, è necessario cercare anche la percentuale di blocco. 300 GB non sono una quantità enorme da gestire per mongodb. Può facilmente andare molto oltre.

Altri comandi utili:

    db.stats();
    db.currentOp();


-5

MongoDb è webscale .. Siamo spiacenti di averlo detto ..

Probabilmente nessuna corrispondenza impiegherà un po 'di tempo sulla base forse di un intervallo di scansione ???

Lo analizzerei .. Mongo non suona come un DB per gestire 300 GB, e probabilmente non è ancora abbastanza maturo per sapere come agisce con grandi quantità di dati ..

Per quale motivo stai usando Mongo ??


Era proprio quello che il ragazzo prima di me (che se ne andava) era a suo agio nell'usarlo e lo aveva implementato, sfortunatamente. Il lato positivo è che siamo aperti a nuovi suggerimenti DB.
Mark LeMoine,

Quali dati stai memorizzando ??? è tutto sulla tua struttura di dati
Arenstar,

Si tratta di piccoli file di registro, ognuno dei quali contiene un ID (int), il nome del server (stringa), il payload del messaggio (stringa), la data e l'indirizzo IP. Al momento ho indici su ID e nome del server.
Mark LeMoine,

8
ci sono un sacco di aziende là fuori che usano mongodb. 300 g è fattibile, chiedi alla gente di foursquare, wordnik e boxedice che hanno un sacco di dati. semmai, gli indici sono errati. Verificherei quelli prima di estrarre il DB e sostituirlo con qualcos'altro.
luckytaxi,

1
@Arenstar: cosa significa webscale? E come è diverso da qualsiasi altra scala?
Joshua Partogi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.