Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eRN0F-0003zP-71 for pgsql-bugs@arkaria.postgresql.org; Tue, 19 Dec 2017 18:52:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eRN0E-0004rL-5O for pgsql-bugs@arkaria.postgresql.org; Tue, 19 Dec 2017 18:52:34 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1eRN0D-0004rA-O8 for pgsql-bugs@lists.postgresql.org; Tue, 19 Dec 2017 18:52:34 +0000 Received: from mail-dm3nam03on0053.outbound.protection.outlook.com ([104.47.41.53] helo=NAM03-DM3-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1eRN05-0002h0-Nw for pgsql-bugs@postgresql.org; Tue, 19 Dec 2017 18:52:32 +0000 Received: from CY4PR1001CA0019.namprd10.prod.outlook.com (10.171.218.160) by DM5PR10MB1882.namprd10.prod.outlook.com (10.175.89.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.323.15; Tue, 19 Dec 2017 18:52:20 +0000 Received: from SN1NAM02FT031.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::205) by CY4PR1001CA0019.outlook.office365.com (2603:10b6:910:3d::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.323.15 via Frontend Transport; Tue, 19 Dec 2017 18:52:20 +0000 Authentication-Results: spf=permerror (sender IP is 192.231.134.1) smtp.mailfrom=blackducksoftware.com; 2ndquadrant.com; dkim=none (message not signed) header.d=none;2ndquadrant.com; dmarc=fail action=none header.from=blackducksoftware.com; Received-SPF: PermError (protection.outlook.com: domain of blackducksoftware.com used an invalid SPF mechanism) Received: from ops-mail01.dc2.lan (192.231.134.1) by SN1NAM02FT031.mail.protection.outlook.com (10.152.72.116) with Microsoft SMTP Server id 15.20.302.6 via Frontend Transport; Tue, 19 Dec 2017 18:52:19 +0000 Received: from bds01237.bds-ad.lc (bds01237.bds-ad.lc [10.1.6.127]) by ops-mail01.dc2.lan (Postfix) with ESMTPS id 5ECD63F416; Tue, 19 Dec 2017 13:52:19 -0500 (EST) Subject: Re: BUG #14932: SELECT DISTINCT val FROM table gets stuck in an infinite loop To: Tomas Vondra , Tom Lane , Andres Freund CC: Thomas Munro , PostgreSQL Bugs References: <2a76784c-06cb-46ec-35be-9895d144b839@2ndquadrant.com> <263b03b1-3e1c-49ca-165a-8ac6751419c4@2ndquadrant.com> <20171206193545.3imvbfwjgrmuho3s@alap3.anarazel.de> <790BC80E-D8E5-499B-A1E3-8EE0752B53ED@anarazel.de> <06523583-b9c5-1424-ef0a-1fc8063e9ed7@2ndquadrant.com> <20171206204616.wcect35fuj5gjde2@alap3.anarazel.de> <67e5af9b-f509-7b9e-f7a1-e01112f6c18d@2ndquadrant.com> <20171206211225.zcp2crfr3bssn3xr@alap3.anarazel.de> <21d507d9-9024-33a8-37c8-b472b3dce7df@blackducksoftware.com> <20171206214003.lvz3q5coaewxr7vp@alap3.anarazel.de> <16912.1512600919@sss.pgh.pa.us> <0e91ba4e-5afc-220e-b1f7-56a838aee845@2ndquadrant.com> <29a04fd9-abe6-7c5f-dadc-a80459890f53@2ndquadrant.com> From: "Todd A. Cook" Message-ID: <0f552dee-2b87-2a74-7862-7b0ff095fc82@blackducksoftware.com> Date: Tue, 19 Dec 2017 13:52:19 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <29a04fd9-abe6-7c5f-dadc-a80459890f53@2ndquadrant.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.231.134.1;IPV:CAL;CTRY:;EFV:NLI;SFV:NSPM;SFS:(10009020)(346002)(376002)(396003)(39850400004)(2980300002)(448002)(24454002)(189003)(199004)(2906002)(86362001)(54906003)(316002)(26826003)(53416004)(478600001)(64126003)(53936002)(305945005)(356003)(65956001)(104016004)(58126008)(31686004)(6266002)(229853002)(47776003)(93886005)(77096006)(50466002)(110136005)(97736004)(65806001)(6246003)(36756003)(67846002)(2950100002)(85326001)(76176011)(8676002)(4326008)(2486003)(8936002)(81156014)(83506002)(5660300001)(23676004)(106466001)(53546011)(81166006)(230700001)(31696002)(65826007)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR10MB1882;H:ops-mail01.dc2.lan;FPR:;SPF:PermError;PTR:ErrorRetry;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1NAM02FT031;1:guGS7QORHOnJ3SQTXhUo+X1szmPzO/pl4NJzyjb3fihfMiiqePgbpeLjPeNaAN32gwTxiWjUNq8wqHIWxMVV6mRUB/SMWT2mERnMVTzEpQzI7bNkHUdmZMC0rssSqwBE X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7a6c9091-ce3f-45d9-f08c-08d54711a1fd X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153056);SRVR:DM5PR10MB1882; X-Microsoft-Exchange-Diagnostics: 1;DM5PR10MB1882;3:0C2OAefk0HBpVhuOBX2i1026zehgrpX5gTDazq7UkKoLev9T0t5PhRUwFEA1dKSMrb1L1H41YPTPCnFFxKwfHwFSRFJcFa+J8Qv9C//vGTDvHPUv7zaLI6qYPbhUGw/YagfH8yJY0xWmNxQ8rIoPtL40NyCjWy3vWmjZN1uRZaoUn6YqhSoYRuGtKop5JuMZ8OChSOYcNhiFjwP+/A1yntQYa47b2QXto+S2wxPpBYjNcnc1ELoxXKkl+G1VNjoHvX7qFZuvNRJqbf95GiWiiMoUXlC+2siKhihV6V/dewDN9D53HmXm1DD3VQ7ESYfqGcKxKeWAOa9qcJJCefM+JQ==;25:96FDdiY8xMeGoLJ2598wxSUb/3Qu2yYIYGyBqo8e07opt/8fyjHbgtK4ACA7P1dGuF9N5SpZYTg8z8FwU0GWniD57xfrAf/vVKKKjOILCXdS/ugndWv3hT/qv+dtxGjBwfIGVeM+/DHg91LAkuUrWeUSW+sR/6ShqKFSNx4wTkM3mMaQEO8OxJruSlzLSa0EJGPwZGSCz8zC/W2IJsNO3j/L16/1IzQHLZHlxdECRdvjplNOnyVzfaLtx6lXrRYPKP5EVfBuaF+J/clnsvKonIphLK/QlZmEZIaNP0aTQRV4oHsBuICHZXgusD/EMFlYuXlF97a0tUiunJtHKqy+TA==;31:0M2QOKrkQINc1ho2a6xGPlY3dcwRVLAQEA9bM7XlXISNDshXHrwiCtvUlAqO1DNzqS3bVIdSJLLlOZiLow3lVfMbo23WDSwiiFBXA7Q494IM1YpuhajjZ7cB2VLrGdCbrZMtMvheY4xxlSvys8KY5Q8m4lDEN4QctVFlNHJpd0eHmSHdJEPda9BFdgH8x+mfHDx23tnYucXR77mZJPmSfUtli9S936hCMR26PEgn5Ls= X-MS-TrafficTypeDiagnostic: DM5PR10MB1882: X-Microsoft-Exchange-Diagnostics: 1;DM5PR10MB1882;20:bTieoDuC+qpgj7e66S2Y9ZuTAzlULU2DCYH1pMPvVEml0PFxNSgi/ZLiYnFqrQeAUZwOAXjfx/U/mId/6HUEHaM889fl2V9717MTNnXupqueVxSg8i5a8SnJ/lbprxp8gfEg7MBWUV45Jfa+19FKOktPIKeuPqvkc3dF+6VkQm+eCES+yRLqJUBDl6WYNnXTU5uYduohBMYubjj0NbJ/HGz7aPqti3NSU0zt+MYOax0YmNIdRvoT1NQThIeBsMIP6k7FswU6qTVvXHaGxEawN8rAl7jvNvxnKgG/nhGniyqtEzLu+KTskpZQa0BgZ46etcDftn9oY/I2EirxJJqf4mlhtnTIdTSC6KhhI8my/5ZqsZnwe+abrYxNKJejzmYSFg+Lf7AKz2VKbGTLDkb7FEHNvjABZ+RXXF+kwNbgDkTW/V6DKT3VRuTxpXxNWJ2Wg6juoKaFKLQx+eEtnJZ4jsaFFUfSeST0dj6z7LOTHDAS8yJ32a7xdMby5uuegWM+;4:zJra5+bmT0/O7HywCSxdxRhL84n3J52lQ0J9Mnpe+k2GiS+buJ+o2HYymTtJaIKH38cLbvBOMjSmsak5jRXZTvNOerxeMlfX3Der1DFWdtYOylwnwaLDO9TW5ZPUQ9TjQ5rff45WerrbdtVw9kiWfnK05jVv9/5o5XABgLYdM4afP9DnvBvR2j0HpBqbnHuUnHP8uRZFdE36NRd/FdFSZa5ZSvj9IXEDFHd8nUVq0wQa20+gI52TJ2c1pY/1IjJ1GdNAKLygAXIAnYJtmsYCkw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(5005006)(8121501046)(3231023)(3002001)(93006095)(93001095)(10201501046)(6041248)(20161123562025)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123558100)(6072148)(201708071742011);SRVR:DM5PR10MB1882;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:DM5PR10MB1882; X-Forefront-PRVS: 052670E5A4 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTVQUjEwTUIxODgyOzIzOkpVZmoralJTYklOVTMybzN1R0lDbnFkVWRX?= =?utf-8?B?MFRKNUh1YitmWlhoOTYrSmRNc1BoeEJKZWtBejFIN0hLSFNRSXQxTWJldGlE?= =?utf-8?B?MU16dVR2SC94MjUzeGhxWW5KL2dNaXdZY2ZuRUFvZ0tTbGZxVDFZaFNiTDEz?= =?utf-8?B?NEdGSUZqUGUrdkR2NlYzb0ZhOHcxS0lnU2xTc1o3ak5wN3pOWjVGVjVxaTgw?= =?utf-8?B?WEl2RWhxcGlXdlNhRUEwYTl1SVZ4S2dHVExURFg0ME4ydXdtQ2ZsYlRIQU5u?= =?utf-8?B?eXdyT0szbDFmQ1pXZG4wcjVwUjNxeCt6cVBSNE5QRDZ2dmlCVGhrMjZvbnRB?= =?utf-8?B?d3N5eDBIN1N3L3puVmxDc0VIdm5xbWJ0TzFybUlPWUVoazZHV08xVElJMEYw?= =?utf-8?B?djNnY2ZRODJsak42QmJCS2IxR1h5MUxScHlxQ05ZWC9SeEQycVd6UG5HV1dF?= =?utf-8?B?aU1BNzEzeVhpS1dvQmZhWUs1YXpKTHYwTlJUcytrZkQzMHRXYXArNkJWQ1pZ?= =?utf-8?B?d3VTbXdZcmNmanM5cnpqVnJKeEs3YUpMRlg3WkpkSks4Ym5mTUN0cVdvR0Va?= =?utf-8?B?b3RmOGpiS0ZGd1c0eVFtcUgyNWlWWDNQelJYWDRrSnFNL09OdzJvLzZvT1By?= =?utf-8?B?ektTT0U4QkovRDMwa2xrWTFhT2VwV3VCYUJtRE5GcmJFWUt5eXMrYXBsUGdR?= =?utf-8?B?UGZGeXh3aEszZzViejlrUHFlOTdFcEMzR1dMT1BibndzT09weVY1U3JCL0lD?= =?utf-8?B?WlM1bjdHTUpickt3elJKT2NsOUNoV3pqNDMzVzV0WHBOR1ZsNnJ6NDR0a2RU?= =?utf-8?B?TERvS255MXRuMmRtbnVGSE56Qlh6d1NGdEw5a0QzdXpBaHpRWEZsdENIT2N0?= =?utf-8?B?Yy9ZcG1WbXdEZEpkcHEzUWl4UGdQS1ZrYUVJZUFJZ3o2eW1kL0tMQWV2QXAw?= =?utf-8?B?NndYOEdWYjFhTU9qdGJFNjMvV09VbmpWMnliNjVuNGxud1R5U3JqRFVxYUw0?= =?utf-8?B?a2lBWUgxbXlBbkZhM3ZqU3YvQUVxRUFtZE95bTdtQ2tCb2R5ZEE3NUJhYU12?= =?utf-8?B?NDd6RmFTRGtnQXBEMHQ2SzFpY2NuVkd1R05BNG4vaXFCdzdvdU1IamhRbloy?= =?utf-8?B?UnhvUUpCaUcrWmE2Q1pwRUtqSG1RV1R2cDB0R2hNakZqNUY3ZklBa2lqT3dk?= =?utf-8?B?UzRsSFd3ZzljTVVJdThtb3NBaDY1SEZmZEszc2owWjRzNnZhWHdFQVI3TUtM?= =?utf-8?B?SHFwVnpabjZsNEU4UDNpay8yZzU2eDhUT1ZjWG5oMUxQTlNTcU9Ca3NHblJl?= =?utf-8?B?Y2dMbEY0L0hmdGVZbElwRkkzUUtycUVlWXhCVzZyMHNqdEtKSnJYdEVZR0wz?= =?utf-8?B?bkZldWRkazNBTkh3MW91akNBZmYrMVNPMmVIQjVub09rQ2FPMlVld2tXd1lX?= =?utf-8?B?OXhXZ2FlT1NYd1M2eWFMZ0Uvc1VPMVR6RWNwNEdSR242R295RUpKNjROaXh1?= =?utf-8?B?UnZiZnNvYWd4Y00rdzMyZno1Sjdzakd1dGYyVEJXd3RQWi9oVG1CQ1pwd1hv?= =?utf-8?B?ZDJRUDlka0lTREtHZ3BIc2JYVkhJZ09Ray9BNTh2bTdSTWhVT1gweWljdk1y?= =?utf-8?B?NTlNOTdldTlldU84YVdlNHZhV296UE8vL0VpcS9xaVBsRlNaRUp3cmZnZ0NO?= =?utf-8?Q?GYz2MOiWboa+tVR6d4=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR10MB1882;6:HYksPhiKXHMv7JFaXbe7jT/8EvZoofJg2HPcVWLijfR7QL1MHXQfhAUtyF/UBsjbKaM7igW1Qp6HVomIV6+Tih5q2qbLlmrH1mlf5Q4hvJkEkPMZ5KkgQIjG9Ouxu4Db+KjtUMqkaOIv4Ye1Dax/7BPdvyJu9NI4deADpzb9hVJcxCY3tuf/TyfOXAI8aM2ocakLx64kIm+IAnUIvUG/aBXwhktItJwaE+PplumWAo1eRvOzaTgbF4eDDpftpato/AFJ4LFFLKGg0B5l8ollXFoY+F6WSYRbuGV/5kaGf3aHb/am+JSLPm1x7eijfebVU7GuZlKKYimR/cVAvW9TJIHK7FZtyjeTvBrf/r+I5fk=;5:LBMT8kvdZUF78ma+s3qnb/zMtB+Y1ngrSHIsNSYurfvxe8TAfl18iUlx163FRfEAZf9FwbFZUGA+xJciW4Da77Y97Hj2c4TQZgctN/SpJ4SldqvA0BM9OVffnQp23qcPzzBI6Kzu0X3jLZpc2yKiT3VXlzIExzahgnOYp34l2co=;24:qoEUqb3YpxidPJ3FzoTNmKR7z+/FlAqBNLf2i0FoDI0AvyT1BS33FPvgMVTaUjT7IYtEebSCCh+40MBineDZmynKpntnL2W0u2HjE9lgfbA=;7:XqKYeS+SxLWY7zz1GeDGZLqeLANyE15MzipzGHAqSnIBJ4RgQokcAISHeinuxcebykOermRd0kcUjNfLoYEeuptLisEut9I1uSvu2fjO4s2R5AwU/KaMk7NTKsZtbM/gEngEzdKF6Bo4fyW+kkV1yZ8U/QNQydix6ZzNxBYOSHHgGra8ePCNj+RJZ3BoUYVwQODKEex9Vg+PF2+qVKs1/RcLaCTGAZdywRwuj5m9g4RWZcZZnSG0mwKCfP7CMrQw SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: blackducksoftware.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2017 18:52:19.8239 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7a6c9091-ce3f-45d9-f08c-08d54711a1fd X-MS-Exchange-CrossTenant-Id: a8cff409-0d9d-48cf-b483-b7442cbeb39d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a8cff409-0d9d-48cf-b483-b7442cbeb39d;Ip=[192.231.134.1];Helo=[ops-mail01.dc2.lan] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR10MB1882 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On 12/10/17 18:14, Tomas Vondra wrote: > > I've done a simple experiment today - computing a hash for every uint32 > value, and checking how many distinct hash values that produces. For the > 4.2 billion values the results look like this: > > second key ndistinct ndistinct/nkeys > 3.380 i=100000000 nset=98829159 0.99 > 6.240 i=200000000 nset=195351181 0.98 > 9.106 i=300000000 nset=289623103 0.97 > 11.932 i=400000000 nset=381695003 0.95 > 14.814 i=500000000 nset=471621355 0.94 > 17.706 i=600000000 nset=559452278 0.93 > 20.577 i=700000000 nset=645242762 0.92 > 23.496 i=800000000 nset=729036217 0.91 > 26.460 i=900000000 nset=810879821 0.90 > 29.380 i=1000000000 nset=890818778 0.89 > 32.331 i=1100000000 nset=968898478 0.88 > 35.282 i=1200000000 nset=1045164189 0.87 > 38.262 i=1300000000 nset=1119654810 0.86 > 41.251 i=1400000000 nset=1192424766 0.85 > 44.258 i=1500000000 nset=1263482593 0.84 > 47.268 i=1600000000 nset=1332897449 0.83 > 50.305 i=1700000000 nset=1400717923 0.82 > 53.356 i=1800000000 nset=1466962823 0.81 > 56.425 i=1900000000 nset=1531660191 0.81 > 59.489 i=2000000000 nset=1594856205 0.80 > 62.593 i=2100000000 nset=1656588855 0.79 > 65.706 i=2200000000 nset=1716895530 0.78 > 68.829 i=2300000000 nset=1775809288 0.77 > 71.966 i=2400000000 nset=1833353377 0.76 > 75.123 i=2500000000 nset=1889558599 0.76 > 78.271 i=2600000000 nset=1944463039 0.75 > 81.418 i=2700000000 nset=1998096496 0.74 > 84.574 i=2800000000 nset=2050490745 0.73 > 87.711 i=2900000000 nset=2101666393 0.72 > 90.852 i=3000000000 nset=2151669155 0.72 > 93.986 i=3100000000 nset=2200517580 0.71 > 97.084 i=3200000000 nset=2248232772 0.70 > 100.172 i=3300000000 nset=2294849331 0.70 > 103.232 i=3400000000 nset=2340389131 0.69 > 106.273 i=3500000000 nset=2384875319 0.68 > 109.272 i=3600000000 nset=2428339639 0.67 > 112.260 i=3700000000 nset=2470798655 0.67 > 115.199 i=3800000000 nset=2512271730 0.66 > 118.125 i=3900000000 nset=2552788321 0.65 > 121.029 i=4000000000 nset=2592379529 0.65 > 123.895 i=4100000000 nset=2631056297 0.64 > 126.726 i=4200000000 nset=2668843329 0.64 > 129.397 loops 4294967295 set 2703915179 (0.63) > > That means we only ever generate about 64% of the possible hash keys. > That doesn't seem particularly healthy I guess, but for small hash > tables (with fewer than 2^32 buckets) that may not be an issue, as some > of the values will wrap because of the modulo. FWIW, changing hashint8() to int64 val = PG_GETARG_INT64(0); if (val <= UINT32_MAX && val >= 0) return hash_uint32((uint32) val); else return hash_any((unsigned char *) &val, sizeof(val)); fixes the problem for me on all of my data sets. My conjecture is that the existing implementation uint32 lohalf = (uint32) val; uint32 hihalf = (uint32) (val >> 32); lohalf ^= (val >= 0) ? hihalf : ~hihalf; biases lohalf when hashing collections of large-magnitude negative numbers (like my data sets) because the individual bits of lohalf do not have equal probability of being toggled by the exclusive-or. For example, given a value of -9223261146507558080 (0x8000770b48a68340), 15 of the 16 most significant bits in lohalf will toggle, but only half of the least significant will toggle. -- todd