Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1W7UKI-0005DS-Au for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Jan 2014 18:20:58 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1W7UKH-00024e-QR for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Jan 2014 18:20:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1W7UKE-00024L-Jw for pgsql-hackers@postgresql.org; Sun, 26 Jan 2014 18:20:54 +0000 Received: from mail.gransy.com ([2001:1528:137::f1]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1W7UK8-0000G7-8y for pgsql-hackers@postgresql.org; Sun, 26 Jan 2014 18:20:54 +0000 Received: from antispam.gransy.com (antispam.gransy.com [77.78.104.124]) by mail.gransy.com (Postfix) with ESMTP id 81588508D2E for ; Sun, 26 Jan 2014 19:20:45 +0100 (CET) X-Virus-Scanned: G-Hosting.cz + Station.cz + Klenot.cz + Subreg.cz amavisd-new at antispam.gransy.com X-Spam-Flag: NO X-Spam-Score: 0.226 X-Spam-Level: X-Spam-Status: No, score=0.226 tagged_above=0 required=5 tests=[ALL_TRUSTED=-1, DC_IMAGE_SPAM_HTML=0.141, DC_IMAGE_SPAM_TEXT=0.123, DC_PNG_UNO_LARGO=0.001, NO_DNS_FOR_FROM=0.379, TO_NO_BRKTS_PCNT=0.572, T_TVD_MIME_EPI=0.01] autolearn=disabled Received: from mail.gransy.com ([82.208.29.194]) by antispam.gransy.com (antispam.gransy.com [77.78.104.124]) (amavisd-new, port 10024) with ESMTP id yaupD6bEQ62v for ; Sun, 26 Jan 2014 19:20:55 +0100 (CET) Received: from [192.168.1.227] (ip-78-45-139-138.net.upcbroadband.cz [78.45.139.138]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: tv@fuzzy.cz) by mail.gransy.com (Postfix) with ESMTPSA id DD0F4508D0C for ; Sun, 26 Jan 2014 19:20:44 +0100 (CET) Message-ID: <52E551FC.7080505@fuzzy.cz> Date: Sun, 26 Jan 2014 19:20:44 +0100 From: Tomas Vondra User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.1 MIME-Version: 1.0 To: pgsql-hackers@postgresql.org Subject: Re: GIN improvements part2: fast scan References: <51C16235.3080308@vmware.com> <51C170A8.9060509@vmware.com> <51C4ACC5.2090707@vmware.com> <51D00FB6.9030008@vmware.com> <528533D9.3040501@vmware.com> <52E141BA.5000302@vmware.com> <52E4141E.60609@fuzzy.cz> <52E42AD0.5060600@vmware.com> <52E4AA3A.9000607@fuzzy.cz> <52E53458.2010106@vmware .com> In-Reply-To: <52E53458.2010106@vmware.com> Content-Type: multipart/mixed; boundary="------------080609020707090802030100" X-Pg-Spam-Score: -0.8 (/) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------080609020707090802030100 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 26.1.2014 17:14, Heikki Linnakangas wrote: > > I would actually expect it to be fairly effective for that query, so > that's a bit surprising. I added counters to see where the calls are > coming from, and it seems that about 80% of the calls are actually > coming from this little the feature I explained earlier: > >> In addition to that, I'm using the ternary consistent function to check >> if minItem is a match, even if we haven't loaded all the entries yet. >> That's less important, but I think for something like "rare1 | (rare2 & >> frequent)" it might be useful. It would allow us to skip fetching >> 'frequent', when we already know that 'rare1' matches for the current >> item. I'm not sure if that's worth the cycles, but it seemed like an >> obvious thing to do, now that we have the ternary consistent function. > > So, that clearly isn't worth the cycles :-). At least not with an > expensive consistent function; it might be worthwhile if we pre-build > the truth-table, or cache the results of the consistent function. > > Attached is a quick patch to remove that, on top of all the other > patches, if you want to test the effect. Indeed, the patch significantly improved the performance. The total runtime is almost exactly the same as on 9.3 (~22 seconds for 1000 queries). The timing chart (patched vs. 9.3) is attached. A table with number of queries with duration ratio below some threshold looks like this: threshold | count | percentage ------------------------------------- 0.5 | 3 | 0.3% 0.75 | 45 | 4.5% 0.9 | 224 | 22.4% 1.0 | 667 | 66.7% 1.05 | 950 | 95.0% 1.1 | 992 | 99.2% A ratio is just a measure of how much time it took compared to 9.3 ratio = (duration on patched HEAD) / (duration on 9.3) The table is cumulative, e.g. values in the 0.9 row mean that for 224 queries the duration with the patches was below 90% of the duration on 9.3. IMHO the table suggests with the last patch we're fine - majority of queries (~66%) is faster than on 9.3, and the tail is very short. There are just 2 queries that took more than 15% longer, compared to 9.3. And we're talking about 20ms vs. 30ms, so chances are this is just a random noise. So IMHO we can go ahead, and maybe tune this a bit more in the future. regards Tomas --------------080609020707090802030100 Content-Type: image/png; name="gin_query_durations_fixed.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gin_query_durations_fixed.png" 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 AqEue4shyJdUZ4uoc0YCp6I8jQJdoSu66aDLQcSzds8FcYn86/s8gu37yqxO lxkHWK7lhYF2y7AvB0N1bb38mcmrS+QhG13oVCeNAl2hK1pmd8tB/KQbJIm3 fPkQm0XudVd3rKYt3N2RCgcDOXQlXQXPIo3oipZpmoPVCT1fivvZzJ3Tecj0 V8gjbdNZDgYaBbpCV+iKltlyDjbKsf8EGT89NPe46Q/GpRZo31ldW2/1K1zL CzkYaBToCl2hK1pmyzkYLynZXH9SUYvY6ha2t5rnbfUrkleXcDDQKNBVMwMH DnzqqadWrVr10UcfeTwedEXLBDUHEYaVS2ymFWhP7imLBauTvE0vR1lJ8e7O tuBgIIeA09WlS5f27du3YsWKhISE8PBwsdfkyZNfffXVnJwcdEXLDPIcrGb3 6U7oaREhtXY5K9MrZHf3TCAHAzkEoq7s7YWuaJlBnoPpzbA2hRtsyj3YTJ0Q Y2nHWMvfLL3rk8I5GMgh0HUVnKArWqZVDqIN7SlBGVfZFxmymTrhSzG9wLnN loOBHAJRV263Ozk5OSoqqlevXiNHjkxNTc3Pz5f9N27c0C6Fha5omcGA+OYX m/KUKn/pOxpHOfKvWMoXl8g7Z7xyynRlja51Fy0HAzkEnK7OnTv34IMPrl+/ /sSJEyKnnJycF1544b777luzZs2vfvWrqVOnoitaZvAgQho+v0CnGR9HPOIz 5WedrryIp4/oPqTLFX7lYCCHgNPV5MmTRVG6nb///e/79OkzfPjwa9euBUOO 6IqWqWB6pUokpAyMtu8rU8r6yahLN5FdnbzePCcwKW/s4pPJq0syst1dsToR BwM5BJyu+vfvX1VVpdv57rvv/vCHPxw/fnyQ5IiuaJm3bGdJvP/plbHeJpMB kzrRXGxkVZmi6y6tSzdNDgGnq4EDBxYXF+t2JiQkrFu3rm/fvuiKlhk82BSl fXTRCZuF3m0811FrFXb+FAy6aXIIOF3NnDkzIyPDuP/8+fNDhgxBV7RMRldW 9SnUW6lsPOdLdUF7tIWgxlrcaMzBQA5BoSv5jyGjqI8++ki3f9OmTc8++yy6 omUGD1YFbZULUab7B8+4/f5HFhRY6cr3BUdMMS2r0TnGopsmh4DTlbBjx47e vXsvW7ZMpHX16tXCwsJt27aNGTPm8uXL6IqWGVRk53qMeli+w3IpEKetz+JS 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 P7Ow9Jo8nL7N/ZOvp3zV5NUluotq6q+7KyvZ00MRAjmgK3TVefzvS3/UrjQf kmiygH3j0vWTmm6rSvCqvK6eJ1THT7o5GkZdyTjJ96nqYint6Mr04afbreih CIEc0BW6Cghe2+02TgJ0uJrHTOoM9cZ7ftVbrJpqWKg3C2tP+rV4j5R2nGSv KxlaqTdUWZW6UH1GD0UI5ICuoLvpSoYjMXOPO1yGaevG04AJzasDhzQVq21e a1EjOStdGU/6NV6FamkeYPzik8ZCgjpjKRM36KHopskBXUE31NWd61XHTEc/ Tu8VgRtvAW466aeMsUKTGu+yUmdGhCR6zQDU36dl+C2HC6utTgaGTzlSdP6a vMGqSoXsV1YYkUFVawui00MRAjmgK+gyunr+9bPa26Ec1oObxukVE5ruBdas aKV6SJWWcSylvOHHTx/VfeyL287dalqew2iyvZ9foYeimyYHQFfBrqvRaSdD fZg4rlZY164JoprJoXmYnj9sXrAxMe+13e4Zr5wKe8rrotSc10pkhKec2XM2 zU3/n+RjB45V0kPRTZMDoKvur6vC0ms2lV5XveO2WWhR76rERkuFJHrNvFDv CLYvJ6h+bPLqEtOJFcpSIPJtc/IrM7Ld8m8XugRFD0UI5ICu0FUb0U7yliFL i8vGm07GU+b4hbiax1VqXSV1CSt1jKWuwWh0lXZnUnpRly6bRA9FCOSArtBV h2E6fJHxivggr6hGsULM3OPOlopWNK4GotauTfCuV6uZ5u7UrSTi8rp85TXL /LXTVr808/2L9FB00+QA6CpYdKXMWTA++k0+om73n2y5ZkfzusCuJl2pUyo0 s9i11dZtCv3pfkVcasGO/ZetfuMDs4/5dZEqeihCIAd0BQGkK5taD8YrUvbl a2/raoJJoQp16oTXxL8k/ZxA07um5GHz9ZLSi+ih6KbJAdBVUOgqbdNZH6sZ mU8CTGq8NHV7LDWxaWiV2Oi2kMSmFe4NrjKvTpuUN3Da0ec2ndVePNMuV2/8 bsEww4IeihDIAV2hq9tL3PqqK+OiHklNEysS77hqkmFRYMMyvvLjUTPzZeQ0 5vmTQ5OPq3M0tO8cPr9AKyHZjp5lKc6uUp2WHooQyAFdoat2oZZUt3eVrsyE o6mKUuOE9abSSs4mezm936+9OrX+3QvKr87O9ViZUiehtLUmH8Xoim6aHABd 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 RU5ErkJggg== --------------080609020707090802030100 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------080609020707090802030100-- --boundary-632051--