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 <alvhe...@alvh.no-ip.org> - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda