Thread: pgsql: On GiST page split, release the locks on child pages before recu
pgsql: On GiST page split, release the locks on child pages before recu
From
Heikki Linnakangas
Date:
On GiST page split, release the locks on child pages before recursing up. 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. Branch ------ REL9_1_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/153b1dbaa0b94143041ab1e0cf249a02380f0acf Modified Files -------------- src/backend/access/gist/gist.c | 123 ++++++++++++++++++++++++++++++---------- 1 files changed, 93 insertions(+), 30 deletions(-)