Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 75EAB64FD96 for ; Fri, 31 Oct 2008 10:27:36 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 40247-04 for ; Fri, 31 Oct 2008 10:27:32 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from hook.sigaev.ru (hook.sigaev.ru [212.192.243.50]) by postgresql.org (Postfix) with ESMTP id 6179364FD69 for ; Fri, 31 Oct 2008 10:27:32 -0300 (ADT) Received: by hook.sigaev.ru (Postfix, from userid 1003) id 1C50139909; Fri, 31 Oct 2008 16:27:30 +0300 (MSK) Received: from xor.sai.msu.ru (xor.sai.msu.ru [212.192.243.97]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: teodor) by hook.sigaev.ru (Postfix) with ESMTPSA id C72B5398E0; Fri, 31 Oct 2008 16:27:22 +0300 (MSK) Message-ID: <490B07BA.6030109@sigaev.ru> Date: Fri, 31 Oct 2008 16:27:22 +0300 From: Teodor Sigaev User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.17) Gecko/20080925 SeaMonkey/1.1.12 MIME-Version: 1.0 To: Tom Lane CC: Pgsql Hackers Subject: Re: [PATCHES] GIN improvements References: <483FD205.4090904@sigaev.ru> <486BC501.6060605@sigaev.ru> <27880.1215810535@sss.pgh.pa.us> <487A6E0C.3090600@sigaev.ru> <8993.1216843701@sss.pgh.pa.us> <4888A594.6010102@sigaev.ru> In-Reply-To: <4888A594.6010102@sigaev.ru> Content-Type: multipart/mixed; boundary="------------070607090801010509010603" X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200810/1644 X-Sequence-Number: 126661 This is a multi-part message in MIME format. --------------070607090801010509010603 Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 7bit Reworked version of fast insertion patch for GIN. >> * shiftList does LockBufferForCleanup, which means that it can be blocked >> for an indefinitely long time by a concurrent scan, and since it's >> holding >> exclusive lock on metapage no new scans or insertions can start >> meanwhile. >> This is not only horrid from a performance standpoint but it very >> probably >> can result in deadlocks --- which will be deadlocks on LWLocks and thus >> not even detected by the system. > Ops, I see possible scenario: UPDATE tbl SET gin_indexed_field = ... > where gin_indexed_field .... with concurrent shiftList. Will fix. Thank > you. Fixed, see below >> * GIN index scans release lock and pin on one pending-list page before >> acquiring pin and lock on the next, which means there's a race condition: >> shiftList could visit and delete the next page before we get to it, >> because there's a window where we're holding no buffer lock at all. > Agree, will fix. Fixed >> * There is a bigger race condition, which is that after a scan has >> returned a tuple from a pending page, vacuum could move the index entry >> into the main index structure, and then that same scan could return that >> same index entry a second time. This is a no-no, and I don't see any >> easy >> fix. Fixed. TIDBitmap is used for that and for preventing deadlock mentioned above. TIDBitmap is used for collectiong matched tuples from pending pages and after that it used as filter for results from regular GIN's scan. Patch extends TIDBitmap interface by 2 functions: bool tbm_check_tuple(TIDBitmap *tbm, const ItemPointer tid); returns true if tid already exists in bitmap bool tbm_has_lossy(TIDBitmap *tbm); returns true if bitmap becomes lossy Also, sequential scan on pending page is replaced to binary search for performance. It's not a big win but it might improve performance. -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/ --------------070607090801010509010603 Content-Type: application/x-tar; name="fast_insert_gin-0.15.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="fast_insert_gin-0.15.gz" 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 --------------070607090801010509010603--