Tuesday, August 28, 2007

Compactar base de datos PostgreSQL

¿Porque necesito compactar una base de datos PostgreSQL?
PostgreSQL como la mayoria de los servidores de bases de datos no elimina los registros fisicamente de las tablas sino que los marca para ser eliminado posteriormente por razones de rendimiento del comando DELETE.
¿Que consecuencias tiene no compactar la base de datos?
Probablemente hayas llegado a este blog buscando la razon por la que la base de datos tiene un tamaño muy exagerado comparado con la cantidad de registros que tienes y el rendimiento de la base de datos en las instrucciones UPDATE, SELECT e INSERT se estan tardando demasiado en ejecutarse.
¿Cuales son y porque existen diferentes tipos de compactacion en PostgreSQL?
La compactacion en PostgreSQL se lleva a cabo usando el comando SQL VACUUM, sin embargo, este tiene varios modificadores o argumentos dependiendo de la necesidad o la ocasion, estas son las mas importantes:
VACUUM ANALIZE : Actualiza las estadisticas de almacenamiento de las tablas que son usadas por el motor de bases de datos para determinar la forma mas veloz de ejecutar una Consulta, sin embargo, este no bloquea la tabla de forma exclusiva y solo necesita un Cursor de Solo-Lectura, es decir, solo actualiza las estadisticas para mejorar los queries.
VACUUM FULL : Realiza una coleccion de registros eliminados completa reclamando espacio en la base de datos ocupado por registros marcados para ser eliminados. Este comando bloquea las tabla e impide que otras conexiones realicen operaciones sobre la tabla o las tablas afectadas.
Nota: para ambos comandos, el nombre de la tabla es opcional. Si no es especifica el nombre de la tabla, la operacion se realiza sobre la base de datos en la que la conexion donde se ejecuta el comando esta trabajando.
¿Cuando ejecutar cada tipo VACUUM?
Es recomendable realizar VACUUM ANALYZE despues de una considerable cantidad de modificaciones sobre una tabla y realizar VACUUM FULL cuando no exista utilizacion sobre la base de datos, por ejemplo en horas nocturnas fuera del horario de trabajo. pgAgent es un excelente ayudante para este tipo de trabajos programados.
¿Como ejecutar VACUUM en linea de comandos en el servidor?
Usando psql
Para esta tarea podemos usar la utilidad de terminal psql usando el usuario postgres, en ubuntu o debian podemos hacer esto usando los siguientes comandos:
$sudo su postgres
$psql
$VACUUM ;
NOTA: Para ver el progreso del comando puede utilizar el modificador VERBOSE
Para salir de la utilidad psql utilice \q
Usando pgAdminIII
Abre la conexion con el servidor de bases de datos usando pgAdminIII y selecciona en el arbol izquierdo el nombre de la base de datos que se compactara: Click Derecho y Seleccione "Mantenimiento" el cual le mostrara una ventana como la siguiente:

1 comment:

Anonymous said...

Muy útil la información. Muchas Gracias. Augusto (ARG)