Problema con pg_statistic en postgresql v8.3.x

Buenas, tenemos un problema de rendimiento con una consulta en el sistema pilagá usando la version de postgresql 8.3:
La consulta en particular es en ingresos / consultas y listados / listado de recursos propios por UP, usando filtros de fechas.
La demora para la misma, es de aproximadamente 6 minutos si se usa como filtro un periodo de 2 días, y una hora si se filtra para obtener los resultados de todo un mes. Los tiempos apenas disminuyeron al realizar un vacuum analyze.
Después de varias pruebas, logramos una mejora notable al vaciar el contenido de la tabla pg_statistic, resultando en 3 y 5 segundos para los respectivos filtros mencionados, pero estos resultados se vuelven a perder al realizar nuevamente un vacuum analyze.

Por otra parte, si se trabaja la misma base usando postgresql 9.1.x, los tiempos para las 2 mismas consultas son de 4 y 50 segundos respectivamente (habiendo hecho previamente un vacuum analyze). En este caso, si se vacía la tabla pg_statistic, ocurre lo contrario que en la versión 8.3, y los tiempos de la consulta se disparan.

Me gustaría ver si tienen alguna sugerencia sobre el tema, si esto se debe a algún bug conocido de esa versión de postgresql, si hay inconvenientes en trabajar con la versión 8.3 y sin statistic (y vaciando la tabla cada vez que se realiza un analyze), o si deberíamos updatear la versión de postgresql.

Saludos,
Juan Manuel

Hola Juan

En primer lugar que buen trabajo que hicieron para encontrar una forma de correr el query en tiempos razonables.

Algunos comentarios
1- Migrar a 9 no es posible todavia porque Pilaga no esta aun certificado para esa version de Postgres, voy a averiguar como vienen los tiempos y les cuento.
2- Borrar toda la pg_statisics, podria tener algun efecto negativo en la performance de otro(s) query(s) (otras tablas). Quizas se podria solo borrar aquella info de la pg_statistics para la/s tabla/s involucradas en el query. Si me mandas el query, veo como seria el delete de la pg_statistics
3- Podrias ejecutar el query con un explain previo (o explain analyze) y mandar la salida del explain. Quizas se pueda crear algun indice adicional que mejore este query. En ese caso te pido que lo ejecutes con la tabla pg_statistics llena y vacia.

saludos
Ignacio

Hola Ignacio, antes que nada gracias por la respuesta.

Te adjunto en un zip la query y el resultado de los explain con la tabla pg_statistic llena y vacía.
El formato de salida de estos últimos no parece ser el más legible, si necesitás que lo vuelva a subir de otra manera avisame.

Saludos


query y explains.zip (7.42 KB)