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

Re: Problema con Insert de una fila muy grande.

From: " Sebastián Salazar Molina(dot)" <sebastian(at)guachunguere(dot)cl>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Problema con Insert de una fila muy grande.
Date: 2011-09-23 01:31:18
Message-ID: 201109222231.18768.sebastian@guachunguere.cl (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
On Jueves 22 Septiembre 2011 21:24:01 Alvaro Herrera escribió:
> 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.


Lo que adjunté en el correo es todo el log que me entrega el servidor, 
cambiando a log all, me devuelve la consulta, pero no aporta 
información adicional, no encontré tampoco una forma de hacer que 
me mostrara mensajes más detallados.
Lo que me sorprende es que no intente usar swap, y aún el tema de 
la copia, también me llama la atención, ya que para que los 800MiB, 
colpasen la máquina, se debería copiar más de 4 veces, lo que me 
sorprende. 
De todos modos, la idea que propones Álvaro, me parece bastante 
pausible, lo intentaré mañana en el trabajo.

Muchas Gracias. Saludos cordiales.

In response to

Responses

pgsql-es-ayuda by date

Next:From: Alvaro HerreraDate: 2011-09-23 02:05:24
Subject: Re: Problema con Insert de una fila muy grande.
Previous:From: Sebastián Salazar Molina.Date: 2011-09-23 01:21:37
Subject: Re: Problema con Insert de una fila muy grande.

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