On Wed, Mar 14, 2018 at 7:21 PM, Simon Riggs <simon.ri...@2ndquadrant.com>
wrote:

> On 14 March 2018 at 13:33, Pavan Deolasee <pavan.deola...@gmail.com>
> wrote:
> >
> >
> > On Wed, Mar 14, 2018 at 4:53 PM, Simon Riggs <
> simon.ri...@2ndquadrant.com>
> > wrote:
> >>
> >> On 14 March 2018 at 04:36, Pavan Deolasee <pavan.deola...@gmail.com>
> >> wrote:
> >> > I wonder if the shortened code path actually leads to
> >> > heavier contention for EXCLUSIVE lock on the rightmost page, which in
> >> > turn
> >> > causes the slowdown. But that's just a theory. Any ideas how to prove
> or
> >> > disprove that theory or any other pointers?
> >>
> >> Certainly: dropping performance with higher sessions means increased
> >> contention is responsible. Your guess is likely correct.
> >>
> >> Suggest making the patch attempt a ConditionalLock on the target
> >> block, so if its contended we try from top of index. So basically only
> >> attempt the optimization if uncontended. This makes sense because in
> >> many cases if the block is locked it is filling up and the RHS block
> >> is more likely to change anyway.
> >
> >
> > Hmm. I can try that. It's quite puzzling though that slowing down things
> > actually make them better.
>
> That's not what is happening though.
>
> The cache path is 1) try to lock cached block, 2) when got lock check
> relevance, if stale 3) recheck from top
>
> The non-cached path is just 3) recheck from top
>
> The overall path length is longer in the cached case but provides
> benefit if we can skip step 3 in high % of cases. The non-cached path
> is more flexible because it locates the correct RHS block, even if it
> changes dynamically between starting the recheck from top.
>
>
So as I noted in one of the previous emails, the revised patch still takes
fast path in 98% cases. So it's not clear why the taking steps 1, 2 and 3
in just 2% cases should cause such dramatic slowdown.

If there is enough delay in step 1 then any benefit is lost anyway, so
> there is no point taking the cached path even when successful, so its
> better to ignore in that case.


The non-cached path is also going to land on the same page, it just that
the _bt_search() will ensure that it doesn't happen quickly. So my
understanding that the additional time spent in _bt_search() accidentally
reduces contention on the EX lock and ends up improving net performance. I
know it sounds weird..

Thanks,
Pavan

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

Reply via email to