Hogar Mapa Indice Busqueda Noticias Arca Enlaces Sobre LF
[Top bar]
[Bottom bar]
[Foto del autor]
por Mark Nielsen

Sobre el Author:

El autor trabaja en The Computer Underground, Inc. como experto en Linux y se divierte haciendo tonterias y proyectos tontos, porque, �vaya!, los ordenadores SE SUPONE que son divertidos. Mark tambi�n trabaja en ZING, www.genericbooks.com como voluntario para ayudar y promover el software y las publicaciones libres y abiertas.

Contenidos:

  1. Introducci�n
  2. Preparando un ramdisk para /Test
  3. Configurando un ramdisk para PostgreSQL
  4. Comentarios acerca de la velocidad
  5. Comentarios
  6. Referencias

Acelerando peque�as bases de datos en Linux

[Ilustración]

Resumen:

Este art�culo muestra como acelerar un servidor de bases de datos PostgreSQL usando un disco ram (RAMDISK).



 

Introducci�n

Ok, �qu� es un disco ram y como lo podemos usar para acelerar un servidor de bases de datos como PostgreSQL?

Un ramdisk es b�sicamente memoria que pretendes usar como si fuera una unidad de disco duro. En cualquier momento que usas un ramdisk, b�sicamente est�s usando tu memoria y no tu disco duro. Hay ventajas y desventajas de esta aproximaci�n. Fundamentalmente, la gran ventaja es que dado que est�s usando memoria, cualquier cosa que est�s haciendo ser� mucho m�s r�pida dado que el disco duro es m�s lento que la memoria. La gran desventaja es que si haces cambios en el servidor de bases de datos y reinicias el ordenador, perder�s todos los cambios.

En el caso del servidor de bases de datos PostgreSQL, podr�s aumentar la velocidad si colocas todas las bases de datos en memoria.  

Preparando un ramdisk para /Test

Para preparar uno de tus ramdisks por defecto en el directorio /Test, haz lo siguiente:

mkdir -p /Test
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /Test
Para cambiar el tama�o del ramdisk a 50MB, haz lo siguiente:
  1. Decide como de grande quieres que sea el disco ram, en este caso usaremos 50MB
  2. Ahora, edita el fichero /etc/lilo.conf y ejecuta el comando "lilo". Lilo es un programa que le dice al ordenador como debe arrancar cuando lo enciendes y adem�s modifica algunos par�metros del arranque de Linux. A�ade "ramdisk=50000" como yo hice en este fichero:
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    image=/boot/vmlinuz-2.2.5-15
            label=linux
            root=/dev/hda2
            read-only
            ramdisk=50000		
    		
  3. Ahora ejecuta el comando "lilo" y reinicia el ordenador Despu�s de reiniciar el ordenador ejecuta los 3 comandos siguientes:
    mkdir -p /Test
    mkfs -t ext2 /dev/ram0
    mount /dev/ram0 /Test
    

    Si hubieses a�adido esas 3 lineas al fichero /etc/rc.d/rc.local, se ejecutar�an cada vez que arrancases el ordenador.

 

Configurando un ramdisk para PostgreSQL

Idealmente, tendr�as dos servidores de bases de datos. Uno al cual le podr�as hacer cambios, y otro que es una copia que existe en tu ramdisk. Para hacerlo, usar�as comandos como "pg_dump" o "pg_dumpall".

NOTE: Aqu� asumiremos que tu has fijado la opci�n "ramdisk" en el lilo.conf a un tama�o mayor del que tiene tu servidor de bases de datos. Si necesitas averiguar el tama�o aproximado, ejecuta este comando "cd /var/lib/pgsql; du ".

De todas maneras, para coger tu servidor postgresql instalado en "/var/lib/pgsql" y ponerlo en memoria, haz lo siguiente:

        ### Detener el servidor postgres real
/etc/rc.d/init.d/postgres stop
        ### Renombrar el directorio real
mv /var/lib/pgsql /var/lib/pgsql_main
        #### Crear un directorio para tener ah� nuestro disco ram
mkdir -p /var/lib/pgsql_memory
 	#### Cambiar el propietario del nuevo directorio a posgres o cualquiera
	#### que sea el due�o real. 
chown postgres /var/lib/pgsql_memory
	#### Crear un alias o un enlace al nombre original, /var/lib/pgsql
ln -s /var/lib/pgsql_memory /var/lib/pgsql

	#### Formatea el ramdisk
mkfs -t ext2 /dev/ram0
	#### Monta el ramdisk en el directorio postgresql
mount /dev/ram0 /var/lib/pgsql_memory

	#### Copia todo del directorio principal al ramdisk
tar -C /var/lib/pgsql_main -cp . | tar -C /var/lib/pgsql_memory -xp
        ### Arranca el servidor postgresql actual
/etc/rc.d/init.d/postgres start


 

Comentarios acerca de la velocidad

He estado probando para comprobar la velocidad de ejecuci�n con y sin poner postgresql en un ramdisk. Algunas veces la velocidad de ejecuci�n se increment� un 50% al estar postgresql en un ramdisk, y otras veces no lo hizo.

Lo que se puede notar es que cuando los datos son "cacheados" por el sistema, la ganancia en velocidad no es muy elevada, cerca del 10% o el 20%. Cuando se introducen muchos datos únicos dentro de la base de datos, la velocidad crece drasticamente.

La mayor ventaja del truco del ramdisk es que obligas a la base de datos a permanecer en memoria y evitas usar el disco duro. Si no usas un ramdisk, tu base de datos probablemente a la larga sea "swapeada" fuera de la caché, y entonces cuando vuelva a ser usada, tendr� que ser recargada desde el disco duro.  

Comentarios

  1. En el caso del sistema operativo Linux, aparentemente una vez un fichero se lee, se conserva en memoria hasta que ese espacio de memoria tiene que ser usado para alguna otra cosa. Dicho de otra forma, lo cachea. Bien, esta puede ser una soluci�n, excepto por la experiencia pr�ctica, cuando mi servidor de bases de datos recibe un acceso, yo siempre oigo moverse el disco duro. Usar un disco ram fuerza al servidor de bases de datos a residir en memoria, haciéndolo de manera que no sea "swapeado" fuera de ella. Si usas mucho tu servidor de bases de datos, yo lo forzar�a a permanecer en memoria.
  2. La ventaja de usar un disco ram para tu base de datos es velocidad, llana y claramente. Para bases de datos de solo lectura, esto es fant�stico de verdad.
  3. La desventaja es que tienes que saber como mantenerlo y que si haces cambios, har�as bien en asegurarte de salvaguardar los cambios hechos.
 

Referencias

  1. Como usar un Ramdisk en Linux por Mark Nielsen
  2. Homepage de PostgreSQL

Contactar con el equipo de LinuFocus
© Mark Nielsen
LinuxFocus 1999
Translation information:
en -> -- Mark Nielsen
en -> es David Abilleira Freijeiro

1999-12-17, generated by lfparser version 0.6