Skip site navigation (1) Skip section navigation (2)

Re: Problema con Insert de una fila muy grande.

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: sebastian <sebastian(at)guachunguere(dot)cl>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema con Insert de una fila muy grande.
Date: 2011-09-23 00:24:01
Message-ID: 1316737030-sup-3370@alvh.no-ip.org (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Excerpts from sebastian's message of jue sep 22 16:54:54 -0300 2011:
> Estimados.
> 
> Espero que tenga un buen día, les escribo porque tengo un problema  
> extraño, estoy insertando en una tabla de 5 columnas (bigint,  
> timestamp, varchar, varchar, xml) una fila cuyo campo xml pesa entre  
> 800MiB a 1.2GiB, sin embargo el INSERT de una única fila, se cae por  
> memoria (he probado en un equipo con 4GiB de RAM, otro con 6GiB y un  
> servidor con 8GiB, en todo se cae por memoria).
> 
> Mirando el log me arroja lo que adjunto. El ulimit del sistema está en
> unlimited.

Falta un mensaje de error en alguna parte, pero el dump de memoria
(repetido tres veces: cada vez empieza con la línea que dice
TopMemoryContext) indica claramente que el servidor se queda sin
memoria.

La verdad es que no me sorprende mucho.  Al recibir un dato grande, lo
primero que hará el servidor será tratar de comprimirlo, y para esto
obviamente tiene que hacer un malloc de un área de memoria al menos tan
grande como el dato que está recibiendo.  Es posible que realice una
segunda copia por alguna razón, con lo cual necesitarías el triple de
memoria ... y ahí la cosa se empieza a poner complicada.

Para evitar el consumo de memoria causado por el intento de compresión,
podrías cambiar el modo de almacenamiento.  Mira la documentación en
ALTER TABLE / SET STORAGE.  Además puede ser conveniente usar un
parámetro para mandar el valor XML gigante en lugar de interpolarlo
dentro de la consulta.  Y por último, quizás puedas usar el modo
"fastpath" para invocar a una función, pero no tengo claro si puedes
pasar los parámetros como parámetros separados ...  Pero vale la pena
intentarlo.

-- 
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

In response to

Responses

pgsql-es-ayuda by date

Next:From: Jorge ToroDate: 2011-09-23 01:03:34
Subject: Re: Script de inicio de postgresql 9
Previous:From: Rodrigo GonzalezDate: 2011-09-22 23:14:52
Subject: Re: Problema con Insert de una fila muy grande.

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group