Ruben Fitó escribió:

Hola,

> cuál és la mejor manera para hacer un purgado de tablas de un gran nombre
> de filas mientras se está en producción?? Nota: Antes de hacer purgado se
> hace una copia en otras tablas.
> 
> Los problemas que puedo visualizar son:
> 
>    - Bloqueo de la tabla, esto se podría solventar haciendo un bucle que me
>    hiciera un delete por fila con su propio bloque transaccional. Es mas lento
>    pero no hay problema para eso.

DELETE no bloquea la tabla, así que no necesitas poner una transacción
por cada registro.  Si de todas maneras lo hicieras yo recomendaría
synchronous_commit=off

>    - INDEX.  Se han de reindexar??

No

>    - VACUMM FULL.  Obligatorio??

No, pero haz VACUUM a medida que avanzas para ir liberando el espacio.
Considera poner vacuum_cost_delay para evitar exceso de I/O

>    - Rendimiento... Nota: Nuestro servidor de aplicaciones que conecta con
>    la BBDD ha de devolver respuesta en un màximo de 2 segundos.

Un delete demasiado grande puede ocupar mucho I/O; considera usar
transacciones en bucle para borrar en bloques, quizás 100000 registros
cada vez o así (sync_commit=off).

Si vas a hacer esto frecuentemente, considera usar particiones; de esa
forma el borrado se limita a ALTER TABLE / NO INHERIT, seguido por
DROP TABLE.

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a