PostgreSQL - pg_restore e índices

   
Vista:

pg_restore e índices

Publicado por Luis (4 intervenciones) el 21/09/2007 10:16:23
Buenos días,

Hemos realizado una copia de seguridad con pg_dump de una BBDD para reinstalar un equipo con una nueva versión de postgresql (cascó el disco duro). Realizamos la recuperación de la BBDD con pg_restore (sólo datos) sobre la estructura ya creada (índices incluidos). Como la recuperación era muy lenta (la mayor tabla 'envios' cuenta con 2000000 registros aprox. y varios índices asociados) decidimos parar la restauración y recrear la estructura SIN INDICES. La recuperación de datos fue muchisimo más rápida. Inmediatamente después creamos los índices (que tardaron un poco) pero al realizar cualquier consulta va lentísimo, está claro que no utiliza los índices.

Hicimos lo siguiente:

CREATE INDEX envios_idx01 ON envios btree (razon_social);

Una consulta como la que sigue tarda alrededor de 3 minutos (lo que es inaceptable):

SELECT * FROM envios WHERE razon_social LIKE 'FERNANDEZ' LIMIT 1;

Incluso con el parámetro LIMIT 1 (sólo 1 registro) tarda tantísimo.

¿A alguien se le ocurre porqué pasa esto? ¿Hemos hecho algo mal? ¿Faltaría algún parámetro de configuración de postgresql? ¿Se puede forzar a una consulta a que utilize un determinado índice? ¿Deberíamos haber restaurado la BBDD con los índices creados en la propia estructura y no a posteriori como hicimos aunque tarde tanto?

Cualquier ayuda será agradecida...

Un saludo,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:pg_restore e índices

Publicado por Enrique Acevedo (1 intervención) el 24/10/2008 15:35:15
Luis:
La base de datos fue correctamente cargada, el problema no va en como la levantaste, sino que al crear nuevos indices Postgres no los considera inmediatamente en su sistema, por lo que es necesario que le 'avises' al sistema que ahora hay nuevos indices, esto lo puedes hacer corriendo un vacuum full, o un vacuum -z, o si no haciendo un reindex de la base de datos. Debes tener precuaicion que en esta nueva maquina este arriba la opcion de secuence scan en el postgres.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar