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