• Heikki Linnakangas's avatar
    On GiST page split, release the locks on child pages before recursing up. · 3652d72d
    Heikki Linnakangas authored
    When inserting the downlinks for a split gist page, we used hold the locks
    on the child pages until the insertion into the parent - and recursively its
    parent if it had to be split too - were all completed. Change that so that
    the locks on child pages are released after the insertion in the immediate
    parent is done, before recursing further up the tree.
    
    This reduces the number of lwlocks that are held simultaneously. Holding
    many locks is bad for concurrency, and in extreme cases you can even hit
    the limit of 100 simultaneously held lwlocks in a backend. If you're really
    unlucky, you can hit the limit while in a critical section, which brings
    down the whole system.
    
    This fixes bug #6629 reported by Tom Forbes. Backpatch to 9.1. The page
    splitting code was rewritten in 9.1, and the old code did not have this
    problem.
    3652d72d
gist.c 40.9 KB