Lo que podes hacer es ejecutar la consulta por partes (con limits) y
ahacer cursores para cada consulta.
Es mas laborioso pero ocuparias menos memoria.



El día 17 de octubre de 2008 9:27, Silvio Quadri <[EMAIL PROTECTED]> escribió:
>
>
> El 17 de octubre de 2008 4:32, Rafael Comino Mateos <[EMAIL PROTECTED]>
> escribió:
>>
>> Tengo una función que al ejecutarse debe trabajar con un conjunto de
>> 1.000.000 de registros aproximadamente.
>>
>> Sobre ese conjunto de datos, en un cursor saco una a una las filas y la
>> mayoría las borro y otras pues las guardo en una tabla, o hago cálculos,
>> etc.
>>
>> El problema que tengo es de eficiencia, ya que la transacción se hace tan
>> grande que ocupa demasiada memoria y se hace lentísimo la ejecución.
>>
>> Que puedo hacer?
>
> ¿Es necesario que ejecutes todo en una transacción?
> ¿Es necesario también tener un cursor?
> Yo he ejecutado cosas similares con plpgsql y no tuve inconvenientes ...
>
> Después de ejecutar muchos "delete"s sobre la tabla ¿Hacés el vacuum?
> Quizás ejecuciones anteriores que no efectuaron el vacuum correspondiente
> estén afectando la performance.
>
> Saludos!
> Silvio
>
>
>
>
--
TIP 1: para suscribirte y desuscribirte, visita 
http://archives.postgresql.org/pgsql-es-ayuda

Responder a