Come aumentare il limite dei dati bufferizzati?


16

All'interno di Ubuntu ho creato una raccolta di database MongoDB contenente 1 milione di record e quando provo a eseguire un comando di ordinamento su di esso, visualizzo il seguente errore:

 "$err" : "Runner error: Overflow sort stage buffered data usage of 33555002 bytes exceeds internal limit of 33554432 bytes",
 "code" : 17144

Qualcuno può descrivere come aumentare il limite interno in modo da poter eseguire questo e altri comandi su larga scala rispetto ai dati?


Dubito che tu possa. Il problema probabilmente è con la tua affermazione: EXPLAIN mostra che stai usando un INDICE? In caso contrario, è necessario aggiungere un INDICE alla tabella.
Rinzwind,

Ciao Rinzwind. Sto cercando di confrontare le prestazioni, quindi sto cercando di eseguire una sorta di dati utilizzando noindex, indice primario e un indice secondario. Stai suggerendo che non è possibile eseguire una sorta di scala senza un indice?
Jon295087,

Ah. Beh, tendo ad esaminare le prestazioni usando EXPLAIN (non appena EXPLAIN non mi dà un numero basso di record, le prestazioni sono cattive). Probabilmente dovrai limitare i tuoi record se vuoi farlo in questo modo.
Rinzwind,

Ho scoperto che MongoDB elaborerà circa 25000 documenti in questo set di dati, ma cadrà con qualcosa di più grande ... Immagino sia solo una limitazione del database? Grazie per i vostri commenti.
Jon295087,

Risposte:


23

Questo può accadere a causa di un bug come SERVER-13611 (quindi assicurati di essere sull'ultima versione) o perché stai cercando di ordinare su un indice sparse in 2.6 , ma più di solito è perché stai semplicemente tentando di ordinare anche molti record in memoria senza un indice.

Il limite specifico che stai colpendo è intenzionale ed è documentato qui : non può essere modificato, quindi è necessario ridurre il set di risultati o utilizzare un indice ecc. Per eseguire l'ordinamento.

Aggiornamento (novembre 2014): la prossima versione 2.8 (2.8.0-rc0 al momento della stesura di questo) ora consente di modificare questa impostazione, come segue:

db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: <limit in bytes>})

Il valore predefinito è 32 MiB (33554432 byte) e deve essere regolato con cura: gli ordinamenti in memoria di grandi dimensioni possono causare l'arresto del database (motivo per cui in primo luogo c'era un limite).


"errmsg": "nessuna opzione trovata da impostare, usa help: true per vedere le opzioni"
Mohammad Efazati

1
probabilmente stai usando una versione molto diversa da quella prevista per questa risposta, questa è stata scritta molto tempo fa
Adam C

2

Mi sono imbattuto anche nel problema durante l'ordinamento e l'impaginazione dei record 200K +. La soluzione più semplice sembra essere quella di aggiungere un indice (per gli attributi su cui si sta ordinando.

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.