Re: Autovacuum

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Patricio Cifuentes Ithal <pcifuentes(at)siigsa(dot)cl>
Cc: listapostgres(at)hotmail(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Autovacuum
Date: 2006-12-14 21:38:55
Message-ID: 20061214213855.GB31475@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Patricio Cifuentes Ithal escribió:
> Hola lista!,
> Me sorprendió la respuesta de hacer autovacuum cada 5 a 10 minutos, entiendo
> q en las ultimas actualizaciones de postgres tiene la opción de autovacuum,
> pero yo manejo postgres 7.4 y tengo un proceso de vacuum de mis bases de
> datos que son 10, tres veces al día.
>
> No encontré nunca alguna documentación que me dijera a cada cuanto debiera
> hacerse un vacuum, por lo tanto yo definí ese rango.
>
> Ahora... la pregunta es... con la versión que manejo yo (7.4) y que tengo un
> procedimiento, manual en perl (ejecutado por cron) de vacuum, tres veces al
> día, y que tengo constantes movimientos en las bases de datos y que pesan
> alrededor de 6 gigas, además de unas 20 a 25 conexiones de usuarios a través
> de distintos sistemas y pgadmin.

Autovacuum hace un analisis del estado de cada tabla (basandose en las
estadisticas de uso), y si considera que debe hacerse un vacuum a una
tabla, se hace; si considera que debe hacer un ANALYZE, se hace. Si
considera que no debe hacerse ninguna de las dos cosas, no se hace nada.
Tomando todo esto en cuenta, resulta que no hay ningun problema en dejar
que autovacuum se ejecute cada 10 o cada 5 o cada 1 minuto, porque si
determina que las tablas no necesitan nada, entonces no hara nada.

La determinacion de la necesidad de hacer VACUUM o ANALYZE se hace
basandose en ecuaciones que estan descritas en la documentacion de
autovacuum. En la version 7.4 tambien hay un autovacuum (modulo
contrib), que es bastante menos configurable que el autovacuum que se
introdujo en la version 8.0 de Postgres; las ecuaciones son mas o menos
las mismas, con la diferencia de que los parametros solo pueden ser
definidos "para todas las tablas" en el modulo contrib, en cambio para
el autovacuum integrado se pueden definir distintos tabla por tabla.
Es mas; si quieres desactivar el autovacuum para una tabla en
particular, puedes hacerlo (cosa que no puedes hacer con el modulo
contrib).

Con respecto a que tan frecuentemente es conveniente ejecutar vacuum
sobre una tabla, es obviamente dependiente de que operaciones se hagan
sobre la tabla, y que tan frecuentemente. Por ej. si solamente haces
INSERT, no necesitas hacer vacuum mas que una vez cada mil millones de
transacciones. Si haces UPDATEs o DELETEs, te conviene ejecutar vacuum
de manera que el espacio liberado por vacuum este en "estado
estacionario" con respecto al espacio que van desperdiciando U/D (es
decir, que U/D creen tantas tuplas nuevas, como VACUUM libere espacio,
en el periodo de tiempo comprendido entre dos ejecuciones de VACUUM).

Asi, para una tabla muy pequeña a la cual le hagas muchos UPDATEs, te
conviene hacer VACUUM muy seguido (se sabe de algunos casos en que se
hacen VACUUMs cada un minuto o menos).

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Fernando DÍaz 2006-12-14 23:11:36 Problema con pg_restore
Previous Message Alvaro Herrera 2006-12-14 21:28:38 Re: Ayuda con fechas