2013-01-23 12 views
5

Ho richiesto this question in mongodb google group, in assenza di risposte che lo postano qui.Quanto spazio aggiuntivo potrebbe riparare il database richiede

Abbiamo un'istanza di mongo (versione 2.0.1) a nodo singolo. Stiamo esaurendo lo spazio su disco anche dopo l'archiviazione giornaliera, dato che mongo non restituisce lo spazio al sistema operativo e tenta di usarlo da solo. Attualmente la nostra configurazione è diventata molto scarsa con circa il 50% di spazio inattivo. È possibile notare che la dimensione dei dati + indice è di circa 1170 GB mentre la dimensione di archiviazione è di circa 2158 GB e la dimensione del file è di circa 2368 GB.

db.stats()  
{ 
    "db" : "default",    
    "collections" : 106, 
    "objects" : 553988389, 
    "avgObjSize" : 2094.1392962010254, 
    "dataSize" : NumberLong("1160128855044"), 
    "storageSize" : NumberLong("2315777236208"), 
    "numExtents" : 1487, 
    "indexes" : 107, 
    "indexSize" : 97914435136, 
    "fileSize" : NumberLong("2543459500032"), 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 

Vogliamo recuperare lo spazio e come questo non è un sistema critico missione (proprio come un cantiere di dumping per i registri) può sostenere un tempo di inattività. Non vogliamo spendere per la creazione di un set di repliche anche se ci troviamo in un datacenter fisico, quindi preferiremo non collegare altro disco solo per la riparazione del database.
Voglio capire: -
-Come è richiesto molto spazio libero su disco per il database di riparazione
-Quanto spazio possiamo sperare di recuperare dopo la riparazione del database
-around quanto tempo dovrebbe prendere per ripristinare il database.
-Se il database di riparazione continua, è sufficiente ucciderlo e riavviare il database.

La massa dei nostri dati giace in un'unica raccolta, quindi se la raccolta compatta sarebbe meglio del database di riparazione.

+1

di riparazione può richiedere fino a 2X spazio. –

+0

2X di dimensione dei dati o dimensioni di archiviazione? – pseudonym

+0

Repair eseguirà un '' mongodump'' e '' mongorestore'' e per questo richiede il doppio dello spazio su disco utilizzato dal database, vale a dire che ha bisogno di spazio per memorizzare i vecchi e nuovi file di database. Per evitare che si possa fare manualmente un '' mongodump'', eliminare i file del database e quindi eseguire '' mongorestore''. In alternativa, se hai solo bisogno di recuperare spazio inutilizzato puoi eseguire '' compact'' (assicurati di avere 2 GB di spazio libero). – diliop

risposta

2

Per prima cosa, si consiglia di eseguire l'aggiornamento da 2.0.1. Almeno a 2.0.7 se non 2.2.2. La riparazione richiede 2x dimensioni del file. Si dovrebbe finire con un po 'più grande delle dimensioni dei dati come le dimensioni del file. Il tempo necessario dipende dalle risorse di sistema e dall'impegno del sistema. Compatto non ha spazio libero su disco - si limita a deframmentare all'interno del file di dati.

In 2.2.x è possibile utilizzare collMod

comando per impostare usePowerOf2Sizes per ridurre la frammentazione dei file. Ad esempio, verrà inserito un documento di 800 byte e 1024 byte. Elimina quel documento e inserisci un documento da 900 byte, ora lo spazio 1024 può essere riutilizzato. Senza questo forse sarebbero stati allocati solo 850 byte e il nuovo spazio libero sarebbe stato assegnato per il documento da 900 byte.

uccidendo repairDatabase dovrebbe essere ok - i file vengono copiati nella nuova posizione, defragg'd poi copiato nel al termine, ma si dovrà verificare che sia sicuro :)

+0

Grazie a @gregor Attualmente stiamo archiviando regolarmente ma mongo non è in grado di utilizzare correttamente lo spazio liberato che puoi vedere dalla differenza di dati + dimensione dell'indice e dimensione di archiviazione.Se andiamo avanti e compattiamo i dati, inizierà a utilizzare lo spazio (lo spazio libero che è con mongo) in modo più efficiente? Come per l'aggiornamento, al momento non vogliamo investire alcuna larghezza di banda poiché la soluzione completa verrà sostituita entro un paio di mesi circa. Anche come @diliop ha suggerito se 2GB sarebbero sufficienti per 'compact' – pseudonym

+0

@ApoorvaGaurav Ciao, ho visto persone che usano MongoDB in produzione con grandi scritture e legge compattarsi su basi regolari come ogni settimana. Hanno anche scritto una sceneggiatura come questa per farlo automaticamente e senza fare la riparazione, perché ci vuole per sempre e ha bisogno di x2 della memoria. Controlla questo: http://blog.parse.com/2013/03/26/always-be-compacting/ ed ecco il codice su github: https://github.com/ParsePlatform/Ops/blob/master/ strumenti/mongo_compact.rb – Maziyar

Problemi correlati