[postgis-devel] Re: [postgis-users] Performance and memory problems
David Blasby
dblasby at refractions.net
Fri Dec 5 10:39:04 PST 2003
strk wrote:
> dblasby wrote:
>
>>So, what is the multi-geometry it's failing on?
>
>
> Following is the multi-geometry.
>
> Note though: once I made GEOS2POSTGIS print it (GEOSasText) I got no
> segfault anymore. If I add a line of code anywere the segfault is back !
> I've had similar experiences with postgresql, and it's very frustrating...
>
> What I remember from my previous experiences (they were trumatic so
> its not much) is that uninitialized/unallocated memory was being used
> and it was randomly available because of postgresql memory pool mechanism.
> It would be helpful having a way to tell postgresql to always free
> pfree'd memory (like the FORCE_NEW thing for libstdc++). Any hint on this ?
>
> SRID=30001;GEOMETRYCOLLECTION(LINESTRING(709096.216508478 160373.930761042,709128.867292722 160363.047166294),LINESTRING(709128.867292722 160363.047166294,709138.068877372 160339.597966701),LINESTRING(709138.068877372 160339.597966701,709124.612796593 160331.880508607),LINESTRING(709124.612796593 160331.880508607,709081.276301142 160334.94770349),LINESTRING(709081.276301142 160334.94770349,709056.936625615 160327.329187167),POLYGON((709068.269935615 160376.406104325,709069.106463379 160377.393723007,709068.269935615 160376.406104325,709068.269935615 160376.406104325)),POLYGON((709077.883676116 160376.272546198,709096.216508478 160373.930761042,709077.883676116 160376.272546197,709077.883676116 160376.272546198)),POLYGON((709047.624998362 160348.638487995,709046.64668149 160350.87732853,709047.624998362 160348.638487997,709047.624998362 160348.638487995)))
>
>
>
>>I dont think this is a recursion problem - it shouldnt be recursing to a
>>depth more than 2 (the original multi* and the sub-component it's
>>working on).
>>
>>It most likely that there's a problem with the collector function or
>>that GEOS is giving back garbage.
>
>
> Consider that removing the pfree() call puts everything back
> in a working state.
The pfree() is just showing us the problem - the actual problem happened
before the pfree(). This is one of the things that I hate about C (as
opposed to java).
Your best bet will probably be to run postgresql in valgrind and see
where the memory is screwed with.
Also, is this a problem with intersect?
What do these queries do:
SELECT buffer(<bad geometry>,0) ;
and
SELECT geomunion(<bad geometry>,<bad geometry>);
If these things work, then there's probably a bug in
make_oneobj_geometry() or add_to_geometry(). There are also
memory-alignment issues (intel machines are 4 byte aligned and sparcs
are 8 byte aligned) - I recently fixed a bug in of those two functions
regarding alignment issues.
You could also try under solaris as it tends to segfault as soon as you
make a memory management mistake (linux tends to keep going for a while).
dave
More information about the postgis-devel
mailing list