viernes, 17 de mayo de 2013

Resize journal en mongodb

Los archivos de journal en mongodb son binarios y secuenciales, en apariencia tienen la misma funcionalidad que los binlogs y archivelogs de MySQL y Oracle, sirven para salvar las transacciones a disco antes de escribirse a sus respectivos datafiles, consiguiendo que los datos sean consistentes ante un fallo o error inesperado del proceso mongod.

Por defecto, mongodb escribe o valida la información del archivo journal al datafile cada 100milisegundos.
Este valor puede ser cambiado con el parámetro :
--journalCommitInterval <value>
Puedes deshabilitar el uso del journal descomentando el parámetro nojournal en el archivo de configuración.

 
[root@localhost mongo]# cat /etc/mongod.conf | grep jour
# Disables write-ahead journaling
# nojournal = true

Por defecto, a partir de la versión 2.x, en todos los sistemas de 64bits! (véase que en 32bits todavía esta desactivado), mongodb te instala 3 ficheros de 1Gb bajo el directorio de journal

 
[root@localhost journal]# cat /etc/mongod.conf | grep dbpath
dbpath=/var/lib/mongo

[root@localhost journal]# pwd
/var/lib/mongo/journal

[root@localhost journal]# ls -rlt
total 3145744
-rw-------. 1 mongod mongod 1073741824 may 16 12:22 prealloc.1
-rw-------. 1 mongod mongod 1073741824 may 16 12:23 prealloc.2
-rw-------. 1 mongod mongod 1073741824 may 16 13:43 j._0
-rw-------. 1 mongod mongod         88 may 16 13:43 lsn

[root@localhost journal]# du -sch *

1,1G    j._0

4,0K    lsn

1,1G    prealloc.1

1,1G    prealloc.2

3,1G    total

Si estas pensando en crear una base de datos para pruebas y no te importa tener los ficheros de journal tan grande  puedes realizar un resize siguiendo los siguientes pasos

Accede al fichero de configuración de /etc/mongod.conf y añade las siguientes lineas

 
#journal smallfiles

smallfiles = true



Para la instancia mongod:
 
[root@localhost journal]# /etc/init.d/mongod stop

Stopping mongod:                                           [  OK  ]



Elimina los fichero prealloc.??, sin este paso, si reinicias la instancia, los ficheros prealloc no cambian de tamaño volviendo a tener 1Gb cada uno.

 
[root@localhost journal]# pwd

/var/lib/mongo/journal

[root@localhost journal]# rm -rf prealloc.1 

[root@localhost journal]# rm -rf prealloc.2 



Sube de nuevo el proceso mongod

 
[root@localhost journal]# /etc/init.d/mongod start

Starting mongod: forked process: 2982

all output going to: /var/log/mongo/mongod.log

child process started successfully, parent exiting

                                                           [  OK  ]

Y aparecerán los ficheros con un tamaño de 128Mb(smallfiles).

[root@localhost journal]# ls -rlt

total 393220

-rw-------. 1 mongod mongod 134217728 may 17 09:20 prealloc.1

-rw-------. 1 mongod mongod 134217728 may 17 09:20 prealloc.2

-rw-------. 1 mongod mongod 134217728 may 17 11:25 j._0

[root@localhost journal]# du -sh *

129M    j._0

128M    prealloc.1

128M    prealloc.2

No hay comentarios:

Publicar un comentario