Re: Out of memory (Failed on request of size 212).

From: "Ricardo Arcos" <rarcos(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Out of memory (Failed on request of size 212).
Date: 2007-08-07 01:53:13
Message-ID: 42810b750708061853ta648843o1a3923b22c9ebe6e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Alvaro,

> Hola Ricardo!
>
> (Seras el mismo Ricardo Arcos que yo conozco o es un alcance de nombre?)
>

Supongo que sí, también estuve en Beaucheff y te ubicaba de nombre :)

>
> El problema es que esta haciendo un HashAggregate, pero estima muy mal
> la cantidad de grupos que se van a generar -- normalmente haria hashagg
> solo si la tabla de hash cupiera en work_mem, pero cuando las
> estadisticas sobre la tabla que estas consultando estan muy malas,
> entonces puede intentar hacer el hashagg y luego encontrarse con que la
> tabla de hash crece demasiado.
>
> Prueba haciendo un ANALYZE a la tabla
> Bryc_TMP_BDM.FP_VentasFactLI5. Luego examina el EXPLAIN de nuevo --
> deberia cambiar el nodo HashAggregate por otra cosa. Si no lo hace,
> aumenta las estadisticas para esa tabla (ALTER TABLE ... SET
> STATISTICS), luego ANALYZE otra vez, y prueba de nuevo.

El explain cambio efectivamente, en vez de usar HashAgrgegate, usa
GroupAggregate:

QUERY PLAN
----------------------------------------------------------------------------------------------
GroupAggregate (cost=2538854.21..2795415.11 rows=1166186 width=56)
-> Sort (cost=2538854.21..2568008.86 rows=11661859 width=56)
Sort Key: cli_id, cat_id, sucu_id
-> Seq Scan on "FP_VentasFactLI5" t1 (cost=0.00..573626.34
rows=11661859 width=56)
Filter: ((peri_id >= 1) AND (peri_id <= 4))

Con eso, la consulta no arroja errores de falta de memoria. Como
medida de seguridad, agregaré ANALYZE donde sea necesario para evitar
este tipo de errores cuando el proceso entre en producción.

>
> Otro problema puede ser que work_mem sea demasiado alto. No lo aumentes
> demasiado! (en tu caso, mas de 100 MB ya es probablemente demasiado).
>

Voy a probar el rendimiento con un valor menor, aunque despues de
hacer ANALYZE a las tablas necesarias, no he vuelto a tener problemas
de memoria.

> Aca se pueden ver los contextos de memoria que crecieron demasiado:
>
> > AggContext: -1738547200 total in 322 blocks; 27768 free (313 chunks);
> > -1738574968 used
> > TupleHashTable: 486662168 total in 68 blocks; 1281968 free (203
> > chunks); 485380200 used
>
>
> --
> Alvaro Herrera http://www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>

Muchas gracias por tu ayuda!

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2007-08-07 04:03:17 Re: como devolver una consulta modificada?¿
Previous Message Jaime Casanova 2007-08-06 23:58:58 Re: explain analyze (dudas)