Re: Vacuumdb

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Mario Soto Cordones - Venezuela <msotocl(at)gmail(dot)com>
Cc: pgsql-es postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Vacuumdb
Date: 2005-07-26 02:34:39
Message-ID: 20050726023439.GB3768@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Mon, Jul 25, 2005 at 03:06:07PM -0400, Mario Soto Cordones - Venezuela wrote:
> Hola Lista tengo la siguiente consulta, tengo una base de datos con
> muchas tablas, una de ellas tiene aproximadamente 5 millones de
> registros y tambien varios indices..... Al hacer el vacuumdb -z -v -a
> -f , cuando llega a esta tabla se demora casi 12 horas en
> completarlo.... Y los discos se vuelven locos trabajando, alguien
> tiene alguna idea de como poder hacer esto mas rapido ya que por lo
> general debo parar el vacuumdb ya que el sistema se torna
> inaccesiblemente lento, trate de hacer un pg_resetxlog pero el
> resultado es el mismo

Primero que nada, pg_resetxlog no tiene nada que ver con el problema.

Segundo, lo mas probable es que cada vez que ejecutas vacuum y lo cortas
despues de un tiempo de ejecucion, vayas "echando a perder" cada vez mas
la tabla y los indices, porque van acumulando tuplas obsoletas y el
problema es cada vez peor.

Tercero, en este momento estas en una situacion critica e indeseable, la
cual es importante evitar en el futuro. Si eliminas o actualizas muchas
tuplas de esa tabla, quizas seria conveniente que ejecutaras vacuumdb
sin -f (es decir vacuum no full), con una frecuencia mayor que un dia.

Cuarto, para salir del problema actual, tienes al menos tres
alternativas:

1. aumentar maintenance_work_mem o vacuum_mem (dependiendo de la
version) a un valor bastante alto, usando SET, y luego ejecutar el
vacuum full sobre esa tabla. Ojo que el incremento debe ser solo para
la conexion que ejecuta el vacuum full. Dejalo todo el tiempo que
necesite, no lo cortes antes de que haya terminado.

2. no usar vacuum, sino CLUSTER. Esto es mejor que vacuum, porque este
ultimo empeora la situacion de los indices, en cambio cluster reescribe
toda la tabla y los indices desde cero. Yo diria que esta es tu mejor
apuesta. Dejalo corriendo todas las horas que necesite.

3. Haz un pg_dump -t de esa tabla, luego la cargas en una tabla nueva,
borras la antigua y le cambias el nombre a la nueva. (Esto es casi
exactamente lo mismo que hacer CLUSTER)

--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
<Schwern> It does it in a really, really complicated way
<crab> why does it need to be complicated?
<Schwern> Because it's MakeMaker.

In response to

  • Vacuumdb at 2005-07-25 19:06:07 from Mario Soto Cordones - Venezuela

Responses

  • Re: Vacuumdb at 2005-07-26 13:45:57 from Mario Soto Cordones - Venezuela
  • Re: Vacuumdb at 2005-07-26 14:12:51 from Martín Marqués
  • Re: Vacuumdb at 2005-07-26 14:19:15 from Mario Soto Cordones - Venezuela
  • Re: Vacuumdb at 2005-07-26 14:26:10 from Mario Soto Cordones - Venezuela

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2005-07-26 13:02:20 RE: [pgsql-es-ayuda] Auditoría
Previous Message Alvaro Herrera 2005-07-25 23:35:11 Re: Re: [pgsql-es-ayuda] ¿Como evitar el "case sensitive"?