Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gjjH5-0002BF-SB for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Jan 2019 11:22:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gjjH4-0004Er-3M for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Jan 2019 11:22:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gjjH3-0004Ej-SS for pgsql-hackers@lists.postgresql.org; Wed, 16 Jan 2019 11:22:21 +0000 Received: from tama50.ecl.ntt.co.jp ([129.60.39.147]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gjjH0-0000wf-4X for pgsql-hackers@postgresql.org; Wed, 16 Jan 2019 11:22:21 +0000 Received: from vc2.ecl.ntt.co.jp (vc2.ecl.ntt.co.jp [129.60.86.154]) by tama50.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id x0GBMDHb028616; Wed, 16 Jan 2019 20:22:13 +0900 Received: from vc2.ecl.ntt.co.jp (localhost [127.0.0.1]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id B377F639235; Wed, 16 Jan 2019 20:22:13 +0900 (JST) Received: from jcms-pop21.ecl.ntt.co.jp (jcms-pop21.ecl.ntt.co.jp [129.60.87.134]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id A5E3F63895D; Wed, 16 Jan 2019 20:22:13 +0900 (JST) Received: from [IPv6:::1] (unknown [129.60.241.75]) by jcms-pop21.ecl.ntt.co.jp (Postfix) with ESMTPSA id 9A79C400AD6; Wed, 16 Jan 2019 20:22:13 +0900 (JST) Message-ID: <5C3F13BC.9030801@lab.ntt.co.jp> Date: Wed, 16 Jan 2019 20:21:32 +0900 From: Etsuro Fujita User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120327 Thunderbird/11.0.1 MIME-Version: 1.0 Subject: Re: Query with high planning time at version 11.1 compared versions 10.5 and 11.0 References: <8db4eca8-6e76-70ff-f934-e0228a1cc298@lab.ntt.co.jp> <20181206075726.pig32e6thltb56hr@alvherre.pgsql> <5C34846E.9090600@lab.ntt.co.jp> <96720c99-ffa0-01ad-c594-0504c8eda708@lab.ntt.co.jp> <5C35D912.8040200@lab.ntt.co.jp> <7354b5bf-5932-4c0c-81ee-d9550de18995@lab.ntt.co.jp> <5C36E105.2020902@lab.ntt.co.jp> <5C38910B.8010901@lab.ntt.co.jp> <5C3EC68F.8030202@lab.ntt.co.jp> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-CC-Mail-RelayStamp: 1 To: Ashutosh Bapat Cc: Pg Hackers X-TM-AS-MML: disable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk (2019/01/16 15:21), Ashutosh Bapat wrote: > On Wed, Jan 16, 2019 at 11:22 AM Etsuro Fujita > > wrote: > (2019/01/15 13:29), Ashutosh Bapat wrote: > > I think, there's something better possible. Two partitioned relations > > won't use partition-wise join, if their partition schemes do not > match. > > Partitioned relations with same partitioning scheme share > > PartitionScheme pointer. PartitionScheme structure should get an > extra > > counter, maintaining a count of number of partitioned relations > sharing > > that structure. When this counter is 1, that relation is > certainly not > > going to participate in PWJ and thus need not have all the structure > > required by PWJ set up. If we use this counter coupled with > > enable_partitionwise_join flag, we can get rid of > > consider_partitionwise_join flag altogether, I think. > > Interesting! > > That flag was introduced to disable PWJs when whole-row Vars are > involved, as you know, so I think we need to first eliminate that > limitation, to remove that flag. > > For that we don't need a separate flag. Do we? AFAIR, somewhere under > try_partitionwise_join() we check whether PWJ is possible between two > relations. That involves a bunch of checks like checking whether the > relations have same bounds. Those checks should be enhanced to > incorporate existence of whole-var, I think. Yeah, that check is actually done in build_joinrel_partition_info(), which is called from build_join_rel() and build_child_join_rel() (only the latter is called from try_partitionwise_join()). That flag is used in build_joinrel_partition_info() for that check, but as you mentioned, I think it would be possible to remove that flag, probably by checking the WRV existence from the outer_rel/inner_rel's reltarget, instead of that flag. But I'm not sure we can do that efficiently without complicating the existing code including the original PWJ one. That flag doesn't make that code complicated. I thought it would be better to not complicate that code, because disabling such PWJs would be something temporary until we support them. Anyway, I think this would be a separate issue from the original one we discussed on this thread. Best regards, Etsuro Fujita