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,
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


0