Re: ERROR: out of memory

From: Javier Chávez B(dot) <jchavezb(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: juapabsan(at)tutopia(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: ERROR: out of memory
Date: 2008-10-07 18:41:37
Message-ID: ded64bba0810071141x1befff7ej6a1f52bb7642e199@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2008/10/7 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>:
> Javier Chávez B. escribió:
>> On Tue, Oct 7, 2008 at 7:02 PM, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
>> > Javier Chávez B. escribió:
>> >> 2008/10/7 <juapabsan(at)tutopia(dot)com>:
>> >
>> >> > finalizaba , usando un cursor (haciendo un join de dos tablas con
>> >> > aproximandamente una de 9383423 y la otra unos 3832237 ) junto con dos
>> >> > tablas mas de mas o menos los mismos registros (millon y medio aprox).
>> >>
>> >> Ups !! creo que el problema viene por este lado .. los cursores en si
>> >> son una estructura no muy recomendable para consultas de esta
>> >> magnitud.. no puedes tratar de ir por otro camino???
>> >
>> > Al contrario ... si tienes que entregarle un numero muy grande de
>> > registros al cliente, es mas recomendable usar un cursor de manera que
>> > pueda ir leyendolos de a pocos.
>>
>> Que ???? eso si que no lo sabia .. :S pero en armar un cursor es una
>> estructura que se llena iterativamente o no???
>
> Hmmm.
>
> Un cursor se ejecuta de la misma forma que una consulta común y
> corriente. La única diferencia es que al cursor se le piden las tuplas
> en conjuntos pequeños a medida que el usuario hace FETCH. En cambio a
> una consulta invocada directamente se le piden todas las tuplas de una
> sola vez.
>
> La verdad es que en el lado del servidor no hay casi ninguna diferencia
> (hay un par de excepciones, que son caracteristicas especiales que se le
> piden a los cursores cuando especificas WITH HOLD y/o WITH SCROLL).
> Pero para el cliente puede ser muy diferente, porque en el caso de la
> consulta directa tiene que ser capaz de recibir todo de una sola vez, y
> por lo tanto ser capaz de emplazar (alloc) mucha memoria. En cambio con
> el cursor, puede emplazar una cantidad pequeña de memoria recibiendo una
> cantidad pequeña de tuplas, luego liberar esa memoria y recibir más
> tuplas; y así repetir hasta consumir todas las tuplas del resultado.
>
> ¿Se entiende?

Yes .. Clarisimo!!! Obrigado :0)

>
>> eso en si no tiene mas costo que tentar de hacer todo con una consulta
>> quiza mas compleja????
>
> Hmm, si lo que el individuo está haciendo es tomar el resultado del
> cursor y luego aplicando un "join" manualmente en la aplicación,
> entonces ciertamente sería mejor usar una sola consulta más compleja.
> Pero no es eso lo que yo entendí del primer post.

Mmm puede ser .. personalmente siempre dejo de lado los cursores, voy
a testear en algunas cosas..
Sld.s

> --
> Alvaro Herrera http://www.amazon.com/gp/registry/3BP7BYG9PUGI8
> "Llegará una época en la que una investigación diligente y prolongada sacará
> a la luz cosas que hoy están ocultas" (Séneca, siglo I)
>

--
Cumprimentos
jchavez
linux User #397972 on http://counter.li.org/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel Lamas 2008-10-07 20:29:39 autovacuum en 4.3.3
Previous Message Alvaro Herrera 2008-10-07 18:38:40 Re: ERROR: out of memory