¿Necesito REINDEXAR y VACÍO una tabla después de eliminar muchas filas?

10

Estoy ejecutando una base de datos PostgreSQL que tiene varias tablas que almacenan información de registro. Esta información tiene únicamente fines informativos y se descarga en un archivo y se elimina de la base de datos si tiene más de 30 días.

Puede haber millones de filas eliminadas, y hemos estado ejecutando un REINDEX cada vez después de la eliminación.

¿Es esto suficiente, o también deberíamos estar ejecutando un VACÍO o un ANÁLISIS DE VACÍO? ¿O no es necesario REINDEX y deberíamos simplemente ejecutar un VACUUM o VACUUM ANALYZE?

Estamos utilizando PostgreSQL 8.2.3, que creo que no permite la aspiración automática.

cowgod
fuente
2
Es posible que desee considerar la partición, consulte postgresql.org/docs/9.0/static/ddl-partitions.html ; entonces puedes soltar particiones y evitar pasar la aspiradora.
alex
3
La versión 8.2.3 tiene auto_vacuum, consulte el manual, pero debe actualizar lo antes posible. La versión 8.2 actual es 8.2.17. Tienes 14 parches detrás, incluidos un par de parches de seguridad. Una actualización a 8.4 o incluso 9.0 es una mejor idea, auto_vacuum ha sido mejorado.
Frank Heikens

Respuestas:

13

Debe hacer un ANÁLISIS DE VACÍO ya que el VACÍO permitirá que el espacio utilizado por los datos eliminados se reutilice y evitará que se envuelva la transacción, y ANALIZAR actualizará las estadísticas del planificador que deberían conducir a mejores planes de consulta para sus consultas de informes.

Un REINDEX no se requiere teóricamente, pero puede encontrar que da como resultado un mejor rendimiento ya que el índice es contiguo.

Las páginas de documentación relevantes para 8.2 están aquí (reindexación de rutina) y aquí (aspiración de rutina) .

hmallett
fuente