Re: Postgres Out of memory

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Eduardo Vázquez Rodríguez <evazquez(at)insys-corp(dot)com(dot)mx>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Postgres Out of memory
Date: 2005-04-05 20:19:51
Message-ID: 20050405201951.GB15302@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Apr 05, 2005 at 03:00:08PM -0500, Eduardo Vázquez Rodríguez wrote:

Hola,

> Estoy corriendo un query que creo que le está pegando mucho al
> performance de mi servidor es una máquina Solaris con 8 Gigas de RAM y
> al correr un query me aparece un error que dice "out of memory"

> SELECT proceso, id_mail, to_mail, temp
> FROM (
> SELECT proceso, id_mail, to_mail, count (*) AS temp
> FROM SENDMAIL2
> GROUP BY proceso, id_mail, to_mail
> HAVING proceso = 'Automatas'
> ) AS TAB_TEMP
> HAVING temp != 1

Por que no usas un solo HAVING? O sea

SELECT proceso, id_mail, to_mail, temp
FROM (
SELECT proceso, id_mail, to_mail, count (*) AS temp
FROM SENDMAIL2
GROUP BY proceso, id_mail, to_mail
HAVING proceso = 'Automatas' AND temp <> 1
) AS TAB_TEMP

De hecho no veo para que usas la consulta externa, y por que no pones
"proceso" en el WHERE (de hecho si te fijas en el explain, la condicion
se mueve dentro del seqscan de sendmail2 como si fuera una clausula
WHERE); por que no usas mejor

SELECT proceso, id_mail, to_mail
FROM SENDMAIL2
WHERE proceso = 'Automatas'
GROUP BY proceso, id_mail, to_mail
HAVING count(*) <> 1

> QUERY PLAN
> Subquery Scan tab_temp (cost=622577.68..622612.73 rows=2003 width=118)
> -> HashAggregate (cost=622577.68..622592.70 rows=2003 width=110)
> Filter: (count(*) <> 1)
> -> Seq Scan on sendmail2 (cost=0.00..622327.31 rows=20029
> width=110)
> Filter: ((proceso)::text = 'Automatas'::text)

Hum! Por favor haz "SET enable_hashagg to OFF" y luego tomas el explain
analyze de la consulta.

> shared_buffers = 50000
> work_mem = 2097151
> maintenance_work_mem = 2097151

Cual es el razonamiento que te hizo poner esos valores en work_mem y
maintenance_work_mem? Mas que seguro, son erroneos. Bajalos a valores
razonables; unas decenas de megas puede ser, cuando mucho ...
shared_buffers tambien es un poco excesivo IMHO.

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"I personally became interested in Linux while I was dating an English major
who wouldn't know an operating system if it walked up and bit him."
(Val Henson)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Douglas Escobar 2005-04-06 00:54:13 RE: [pgsql-es-ayuda] Tamaño INT8
Previous Message J. Arturo Llanquihuén Martínez 2005-04-05 20:14:17 Re: mysql_data_seek():