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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-es-ayuda by date

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