Recientemente compacté mi colección usando el comando:
db.<collectionName>.runCommand( "compact" )
¡Y ahora el tamaño de mi colección parece ser mayor que el tamaño en el disco!
SECONDARY> db.<collectionName>.stats()
{
"ns" : "<databaseName>.<collectionName>",
"count" : 2937359,
"size" : 5681676492, # 5.6 GB
"avgObjSize" : 1934.2805874256433,
"storageSize" : 4292853728, # 4.2 GB
"numExtents" : 2,
"nindexes" : 2,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1.669999999836597,
"flags" : 1,
"totalIndexSize" : 220735648,
"indexSizes" : {
"_id_" : 162326304,
"e_1_" : 58409344
},
"ok" : 1
}
No entiendo cómo esto es posible. ¿No están todas las colecciones mongodb respaldadas por disco en todo momento?
¿Alguien puede explicar estos resultados?
validate
?Respuestas:
storageSize
es la suma de todas las extensiones para esos datos, excluyendo los índices.Para que la colección tome 2 extensiones, son ~ 2GB cada una, por lo tanto ~ 4GB.
size
incluye índices y creo que hay un par de otras cosas que inflan el número. Ninguno de los dos representa realmente el tamaño adecuado en el disco. Para el tamaño del disco,db.stats()
tiene un campo de tamaño de archivo que está más cerca de lo que quieres, creo que estás buscando.El manual es algo mejor para delinear lo que significan los diversos campos, vea aquí las colecciones:
http://docs.mongodb.org/manual/reference/collection-statistics/
Y aquí para las estadísticas de la base de datos:
http://docs.mongodb.org/manual/reference/database-statistics/
Alguna otra información potencialmente relevante:
El comando compacto no reduce ningún archivo de datos; solo desfragmenta el espacio eliminado para que los objetos más grandes puedan reutilizarlo. El comando compacto nunca eliminará ni reducirá los archivos de la base de datos, y en general requiere espacio adicional para hacer su trabajo, generalmente un mínimo de una extensión adicional.
Si repara la base de datos, esencialmente reescribirá los archivos de datos desde cero, lo que eliminará el relleno y los almacenará en el disco de la manera más eficiente que pueda obtener. Sin embargo, necesitará tener ~ 2 veces el tamaño en el disco para hacerlo (en realidad menos, pero es una guía decente).
Otra cosa a tener en cuenta aquí: reparar y compactar quitar el acolchado. El factor de relleno varía entre 1 (sin movimientos de documentos causados por documentos en crecimiento), a 2 (muchos movimientos causados por documentos en crecimiento). Su factor de relleno de ~ 1.67 indicaría que está creciendo (y por lo tanto causando movimientos) bastante.
Cuando compacta o repara una base de datos, elimina ese relleno, por lo que el crecimiento posterior del documento desencadenará aún más movimientos que antes. Debido a que los movimientos son operaciones relativamente caras, esto puede tener un grave impacto en su rendimiento. Más información aquí:
http://www.mongodb.org/display/DOCS/Padding+Factor
fuente
Para mongodb> 3.x
Para db.getCollection ('nombre'). Stats ()
Para db.stats ()
Podemos eliminar el espacio o agujero no utilizado por este
Después de ejecutar un comando compacto o de reparación, podemos obtener el tamaño exacto de almacenamiento y la diferencia de tamaño de datos.
Técnica de compresión en mongodb wiredTiger:
fuente