Skip site navigation (1) Skip section navigation (2)

Re: Configuracion de vacuum

From: Fernando Hevia <fhevia(at)gmail(dot)com>
To: Jorge Vidal - Disytel <jorgev(at)disytel(dot)com>
Cc: arpug(at)postgresql(dot)org
Subject: Re: Configuracion de vacuum
Date: 2009-03-18 16:01:51
Message-ID: b9e2597c0903180901m5dbdf0e3r5abaca88e54c85dc@mail.gmail.com (view raw or flat)
Thread:
Lists: arpug
2009/3/18 Jorge Vidal - Disytel <jorgev(at)disytel(dot)com>

> Buenas,
>   A ver si alguien me puede dar una mano....
>   En un sistema que tenemos aqui, se utiliza una tabla para mantener los
> numeradores o Id´s de las otras tablas. Esto es, cada vez que voy a grabar
> un dato en la tabla X,
>   el sistema busca el siguiente id en la tabla "secuencias" para la tabla
> "X", lo retorna e incrementa la secuencia, (hace un select for update)...
>   Estoy teniendo el problema que esa tabla de secuencias sufre miles de
> updates por hora, por lo que crece y se pone "lenta".
>   El autovacuum está andando, y ahora cada dos horas le estoy haciendo
> vacuum  la bd... con un cron:
>
> 0  2,4,6,8,10,12,14,16,18,20         *                           *
>          *        /usr/local/pgsql/bin/vacuumdb -a  -z
>
>
> El tema es que igual la cosa no mejora, y esa tabla que normalmente ocupa
> menos de 500k llega a crecer por arriba de los 100M, clara señal  algo no
> esta andando correctamente.
> Estoy usando postgres 8.2.7, y aparentemente el proceso de autovacuum esta
> activado, al menos asi lo informa el pgAdmin...
> ¿alguna idea de como mejorar esto...? Probé de tirarle un vacuum  a la
> tabla cada 5 minutos, pero se ve que con los locks que tiene no logra
> entrar.. o algo similar.
> Gracias !
> Jorge
>
>
Jorge, te sugiero postees la consulta en pgsql-es-ayuda(at)postgresql(dot)org que
es la lista apropiada para esto. Te puedes suscribir desde
http://www.postgresql.org

El gran problema de diseño que veo es que en lugar de utilizar las
secuencias de la base decidieron ir por un manejo de secuencias propio e
implementado en una tabla. Un update en postgres es resuelto creando una
nueva tupla y marcando como eliminada la anterior. Evidentemente si tenés
mucha actividad la tabla de secuencias irá incrementándose con cada update
que le hagan.
Debés tener una carga extraordinaria sobre esa tabla para que autovacuum no
logre adquirir el lock exclusivo que necesita. Siendo que la usan para
secuencias me pregunto si no implementaron algún mecanismo de lockeo propio
que no libera nunca la tabla.

Lo primero sería analizar la factibilidad de reemplazar el uso de esa tabla
por secuencias propias de la base. Si logran esto resolverás completamente
tu problema.
Segundo, revisaría el algoritmo que opera sobre esta tabla a ver si no
tienen allí un error y lockean innecesariamente la tabla.
Si los anteriores fallan o no son posibles, se me ocurre distribuir las
secuencias en varias tablas (particiones). En principio le darías más
posibilidades a autovacuum a obtener un lock.

Saludos,
Fernando.

In response to

arpug by date

Next:From: Federico TraniDate: 2009-03-23 02:58:53
Subject: Consultas Postgresql
Previous:From: Jorge Vidal - DisytelDate: 2009-03-18 15:10:51
Subject: Configuracion de vacuum

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group