2013-12-12 12 views
10

Ho un DB denominato log_test1, con solo 1 registro di raccolta con limite. La dimensione massima della collezione limitata è 512 milioni. Dopo aver inserito i dati 200k, ho trovato che l'uso del disco del db è 1.6G. Con db.stats(), posso vedere che storageSize è 512M, corretto, ma il mio file attuale è 1.6G, perché è successo? Come posso controllare la dimensione del disco è solo la dimensione della mia collezione ridotta più la dimensione dell'indice?perché my mongodb fileSize è molto più grande di storageSize in db.stats()?

> use log_test1 
switched to db log_test1 
> db.stats() 
{ 
    "db" : "log_test1", 
    "collections" : 3, 
    "objects" : 200018, 
    "avgObjSize" : 615.8577328040476, 
    "dataSize" : 123182632, 
    "storageSize" : 512008192, 
    "numExtents" : 3, 
    "indexes" : 8, 
    "indexSize" : 71907920, 
    "fileSize" : 1610612736, 
    "nsSizeMB" : 16, 
    "dataFileVersion" : { 
     "major" : 4, 
     "minor" : 5 
    }, 
    "ok" : 1 
} 

risposta

10

Ciò è probabilmente dovuto al fatto che MongoDB prealloca i file di dati e journal.


MongoDB 2

nella directory dei dati, MongoDB prealloca file di dati a una particolare dimensione, in parte per evitare la frammentazione del file system. MongoDB nomina il primo file di dati <databasename>.0, il successivo <databasename>.1, ecc. Il primo file mongod alloca è 64 megabyte, i successivi 128 megabyte e così via, fino a 2 gigabyte, a quel punto tutti i file successivi sono 2 gigabyte. I file di dati includono file con spazio allocato ma che non contengono dati. mongod può allocare un file di dati da 1 gigabyte che può essere vuoto al 90%. Per i database più grandi, lo spazio allocato non utilizzato è ridotto rispetto al database.

Su sistemi Unix-like, mongod prealloca un file di dati aggiuntivi e inizializza lo spazio su disco per i file di dati 0. preallocare in background impedisce ritardi significativi quando un nuovo file di database viene allocato successivo.

È possibile disattivare il preallocazione con l'opzione di esecuzione noprealloc. Tuttavia noprealloc è non destinato all'uso in ambienti di produzione: utilizzare solo noprealloc per il test e con insiemi di dati di piccole dimensioni in cui si eliminano frequentemente database.

MongoDB 3

I file di dati nella directory di dati, che è la directory /data/db in configurazioni di default, potrebbe essere più grande rispetto ai dati impostati inseriti nel database. Considerate le seguenti possibili cause:

file di dati preassegnati

MongoDB prealloca relativi file di dati per evitare la frammentazione del file system, e per questo, la dimensione di questi file non necessariamente riflettono la dimensione dei dati.

L'opzione storage.mmapv1.smallFiles ridurrà la dimensione di questi file , che può essere utile se si dispone di molti piccoli database sul disco.

Il oplog

Se questo mongod è membro di un set di repliche, i dati directory include il file oplog.rs, che è un preassegnate ricoperto raccolta nel database locale.

L'allocazione predefinita è circa il 5% dello spazio su disco nelle installazioni a 64 bit.

La rivista

La directory di dati contiene i file journal, che memorizzano operazioni di scrittura su disco prima di MongoDB li applica ai database.

record vuoti

MongoDB mantiene elenchi di record vuoti nel file di dati perché cancella i documenti e le collezioni. MongoDB può riutilizzare questo spazio, ma, per impostazione predefinita, non restituirà questo spazio al sistema operativo.


Tratto da MongoDB Storage FAQ.

Problemi correlati