Saturday, June 7, 2008

[pgsql-es-ayuda] Comportamiento work_mem (windows)

Cordial Saludo.
 
Tengo una instalación de postgresql 8.3.1 sobre windows que se va a utilizar básicamente para Análisis de datos (OLAP) por lo tanto quiero optimizarla para este fin.
 
El procedimiento que he seguido es el siguiente:
 
1. Activé el "log_temp_files = 0" para monitorear el uso de archivos temporales. (excelente adición en la 8.3)
2. Mi supuesto es que una DB que este sirviendo para OLAP/DATAWAREHOUSE debe tener un valor de work_mem grande, pocos usuarios y un valor shared_buffers intermedio.
3. Arranque con work_mem = 1MB (valor por defecto), shared_buffers = 128MB y max_conections = 5. Tengo 2GB de memoria.
4. Realizo una consulta que en múltiples ejecuciones demora 27s. (es una consulta con múltiples joins y un order by, típica en OLAP)
5. Reviso el log e identifico que se utilizan VARIOS archivos temporales de cerca de 1.5MB (utilizados para joins) y al final un archivo de 35MB (para el order by).
6. Subo el work_mem = 5MB
7. Ejecuto de nuevo la consulta, y efectivamente se ha eliminado el uso de los archivos temporales de aprox. 1.5MB, pero sigue usándose el de 35MB. Vamos bien !!!
8. Subo el work_mem = 50MB
9. Ejecuto la consulta MULTIPLES VECES y SIGUE utilizándose el archivo temporal de 35MB pero creció el tiempo en 2s !!!
10. Sé que los 35MB se utilizan para el order by por que si lo quito ya no se usa ese archivo temporal.
11. Vuelvo a work_mem = 5MB y vuelvo a optener los valores de 2s por debajo.
 
Cual podría ser la razón de este comportamiento?
Estoy SEGURO que durante la consulta NO se esta utilizando memoria en disco por parte del SO, que sería una posible explicación de la lentitud.
 
Agradezco su colaboración.
 
Atentamente,
 
RAUL DUQUE
Bogotá, Colombia
 
 

No comments: