Buenos días compañeros:
Hace tiempo tuve un problema "similar" que mandé a la lista y que resultó ser 
un fallo en el diseño de una consulta. Ahora me sucede algo parecido con una 
consulta lanzada en PostgreSQL, pero no creo que tenga que ver con el diseño de 
la consulta. Les comento de forma detallada.
Tengo instalado Postgres 8.4 en un portátil con sistema operativo Windows 7, un 
procesador de doble núcleo (1.3 GHz) y 4 GB de memoria RAM. He estado manejando 
grandes cantidades de datos en Postgres hasta el momento (tablas de 20, 30 o 
100 millones de tuplas) sin ningún tipo de problemas, incluso haciendo 
diferentes JOINS. Sin embargo, llevo un par de días atascado con una consulta 
en la que pretendo realizar un INNER JOIN entre dos tablas. La primera de ellas 
cuenta con alrededor de 150 millones de tuplas, y la segunda con 
aproximadamente 130 millones. El asunto es que cuando Postgres se dispone a 
realizar la consulta consume todo el espacio de disco que me queda en el PC, y 
por esta razón, no puede finalizar el cálculo de la consulta.
El espacio libre en disco que tengo en el PC asciende a 150 GBs, por lo que me 
parece suficiente para que Postgres pueda realizar la consulta. Más aún, cuando 
anteriormente he podido realizar consultas similares a ésta sin ningún tipo de 
problema. Es por esto último por lo que me da que pensar que algo no está 
funcionando bien en mi server. Podría deberse a una configuración errónea en el 
archivo postgres.conf? Les detallo aquí las tablas que intervienen en la 
consulta y el código sql de dicha consulta:
Tablas utilizadas en la consulta:
TABLA: normalized_coup -- alrededor de 150 millones de registros   IDJ_ORIG 
bigint   IDJ_DEST bigint   COUPLING bigint   IDJ_SAHRED bigint
TABLA: normalized_cocit -- alrededor de 130 millones de registros   IDJ_ORIG 
bigint   IDJ_DEST bigint   COCITATION bigint   IDJ_SAHRED bigintCódigo SQL 
utilizado en la consulta:
SELECT   normalized_coup."IDJ_ORIG",   normalized_coup."IDJ_DEST",   
normalized_cocit."COCITATION",   normalized_coup."COUPLING"INTO  
JOIN_coup_cocitFROM   normalized_coup INNER JOIN normalized_cocit ON 
(normalized_coup."IDJ_ORIG" = normalized_cocit."IDJ_ORIG") AND  
(normalized_coup."IDJ_DEST" = normalized_cocit."IDJ_DEST") ;
Por si sirve de ayuda, cuando ejecuto la consulta, me voy al Monitor de 
Recursos de Windows y en la parte de Disco he comprobado que la E/S de Disco 
oscila entre 15-25 Mb/s. También me parece raro que si activas en el Monitor de 
Recursos los procesos en funcionamiento en el equipo, donde podría visualizarse 
el uso de CPU, Disco..., que realiza Potgres, no veo ninguna línea en el 
gráfico que señale la cantidad de disco que está realmente utilizando Postgres 
(con otras consultas, si que lo he podido apreciar). Además, no ocurre lo mismo 
con los procesos asociados a la CPU, donde si puedo apreciar el uso que 
Postgres está haciendo de ella. Por último el uso de la RAM muestra valores 
oscilando entre los 200 MB y los 400 MB aproximadamente.
Bueno, pues espero haberme explicado bien y no liar más al personal. Hago 
constar también que no soy usuario avanzado de Postgres, sólo soy un usuario 
que maneja consultas en SQL que es para lo que lo necesito realmente.
Saludos y muchísimas gracias de antemano por vuestra atención!
Antonio J.
                                          

Responder a