Re: Performance bug in prepared statement binding in 9.2? - Mailing list pgsql-performance

From Andres Freund
Subject Re: Performance bug in prepared statement binding in 9.2?
Date
Msg-id 20130910122036.GF1024477@alap2.anarazel.de
Whole thread Raw
In response to Re: Performance bug in prepared statement binding in 9.2?  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: Performance bug in prepared statement binding in 9.2?
List pgsql-performance
Hi,

On 2013-09-09 20:38:09 -0400, Andrew Dunstan wrote:
>
> On 08/01/2013 03:20 PM, Jeff Janes wrote:
> >On Thu, Aug 1, 2013 at 10:58 AM, Josh Berkus <josh@agliodbs.com> wrote:
> >>Amit, All:
> >>
> >>So we just retested this on 9.3b2.  The performance is the same as 9.1
> >>and 9.2; that is, progressively worse as the test cycles go on, and
> >>unacceptably slow compared to 8.4.
> >>
> >>Some issue introduced in 9.1 is causing BINDs to get progressively
> >>slower as the PARSEs BINDs get run repeatedly.  Per earlier on this
> >>thread, that can bloat to 200X time required for a BIND, and it's
> >>definitely PostgreSQL-side.
> >>
> >>I'm trying to produce a test case which doesn't involve the user's
> >>application.  However, hints on other things to analyze would be keen.
> >Does it seem to be all CPU time (it is hard to imagine what else it
> >would be, but...)
> >
> >Could you use oprofile or perf or gprof to get a profile of the
> >backend during a run?  That should quickly narrow it down to which C
> >function has the problem.
> >
> >Did you test 9.0 as well?
>
>
> This has been tested back to 9.0. What we have found is that the problem
> disappears if the database has come in via dump/restore, but is present if
> it is the result of pg_upgrade. There are some long-running transactions
> also running alongside this - we are currently planning a test where those
> are not present. We're also looking at constructing a self-contained test
> case.
>
> Here is some perf output from the bad case:
>
>    +  14.67%  postgres           [.] heap_hot_search_buffer
>    +  11.45%  postgres           [.] LWLockAcquire
>    +   8.39%  postgres           [.] LWLockRelease
>    +   6.60%  postgres           [.] _bt_checkkeys
>    +   6.39%  postgres           [.] PinBuffer
>    +   5.96%  postgres           [.] hash_search_with_hash_value
>    +   5.43%  postgres           [.] hash_any
>    +   5.14%  postgres           [.] UnpinBuffer
>    +   3.43%  postgres           [.] ReadBuffer_common
>    +   2.34%  postgres           [.] index_fetch_heap
>    +   2.04%  postgres           [.] heap_page_prune_opt

A backtrace for this would be useful. Alternatively you could recompile
postgres using -fno-omit-frame-pointer in CFLAGS and use perf record -g.

Any chance you have older prepared xacts, older sessions or something
like that around? I'd expect heap_prune* to be present in workloads that
spend significant time in heap_hot_search_buffer...

Greetings,

Andres Freund

--
 Andres Freund                       http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


pgsql-performance by date:

Previous
From: Andres Freund
Date:
Subject: Re: Performance bug in prepared statement binding in 9.2?
Next
From: Andrew Dunstan
Date:
Subject: Re: Performance bug in prepared statement binding in 9.2?