On 02/03/2014 09:09 AM, Craig Ringer wrote:
> At a guess, we're looking at a case where a new child context is created
> at every call, so every MemoryContextResetChildren call has to deal with
> more child contexts.
That would be "yes". After a short run, I see 32849 lines like:
json_array_elements temporary cxt: 8192 total in 1 blocks; 8160 free (0
chunks); 32 used
under the context:
PortalMemory: 8192 total in 1 blocks
PortalHeapMemory: 7168 total in 3 blocks
ExecutorState: 65600 total in 4 blocks
ExprContext: 8192 total in 1 blocks
json_array_elements temporary cxt: 8192 total in 1 blocks;
8160 free (0 chunks); 32 used
The attached patch deletes the context after use, bringing performance
back into line. It should be backpatched to 9.3.
--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services