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)
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(): |