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 1i7RkO-0000nW-O2 for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Sep 2019 22:02:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1i7RkN-0005lP-Dc for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Sep 2019 22:02:55 +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 1i7RkM-0005cX-Uj for pgsql-hackers@lists.postgresql.org; Mon, 09 Sep 2019 22:02:55 +0000 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1i7RkJ-00052Y-NW for pgsql-hackers@lists.postgresql.org; Mon, 09 Sep 2019 22:02:54 +0000 Received: by mail-wr1-x442.google.com with SMTP id i1so15540669wro.4 for ; Mon, 09 Sep 2019 15:02:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=NwT88ROE9SI4A/olOnMHd8XnZSuiRF8jEWIwbg5We3c=; b=tz4Vd35lSAR9oqHhQ4d5gSXqi8Fciut0DALNcyEtJJSydSm08mPP0v5k4hz4cPyZzY InKj2jqrExtKejq03MKPDhCoYP/Q2QjpPXtnNSshaYskdkUrptrueho1gZfw/Tvr4b4i Wh9G6q2LrzdaNqffcy/u4foI05bLXdrSZWE9THZk/wyfs45d9Vob96E7m6rWRGCuRQMe FxbTH5gVi34jJibgUd6CGWqKrQuSX7cIrN4P+678aU+7jAZ7PF0gZBONrezzldxv99qP 2C9mPtT8Gd0P/gHc2JBrFNGLKVDjpaF0gxjD3EEalZX9V63jpcBfGHRh+GL9Q89xyzSE FLIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=NwT88ROE9SI4A/olOnMHd8XnZSuiRF8jEWIwbg5We3c=; b=cGyZBPR0Pn1FDTV7qKiBajAWJJGQQbNQCkFFHqDc9xC2VwGW7NuHy+6E3iF7/74WM+ cW0AhONu0lK08Z9SyKbaiWr9R8Xk8liaA2DJTmhrtgXOtUU8DwuC3SaIeiuhEy5Ivbod E4lm3+4wUyG2T6lRQ/0wtQveSOJJ5he0Y0k6Vwjvjcp14cwvLBrxmBFDPU3Rm+0ChMql YL4hDdzioU+AkJaBX2nGPBvZNlKd+C2bMFptqDeZz987pGnBEjqy58xTSwSf0RUkXUoz OfCLstWKt0WGVNdJ1WN/JpeKEoz7flOhxi7HMhjm4ta1oJJjrrh/UPu3aJ6MK+PK5xfb kw6A== X-Gm-Message-State: APjAAAW9elinyV4Mw8gdawetT/SBdpxcch7vsHKrkMN8OsrULIxcdNu6 tAOGo14QpMCKXRNBrfMVoRhgBbP2QwA= X-Google-Smtp-Source: APXvYqwa7JQ1OcDvFgW59PkeJwwMGgrvbG1ZMVKBW+0sHORZ+JzN7UNSRwQkbX0mwH2cx1jXj888Ww== X-Received: by 2002:adf:ec48:: with SMTP id w8mr20591281wrn.198.1568066140578; Mon, 09 Sep 2019 14:55:40 -0700 (PDT) Received: from localhost (ip-86-49-253-183.net.upcbroadband.cz. [86.49.253.183]) by smtp.gmail.com with ESMTPSA id c6sm27892152wrb.60.2019.09.09.14.55.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Sep 2019 14:55:38 -0700 (PDT) Date: Mon, 9 Sep 2019 23:55:38 +0200 From: Tomas Vondra To: Rafia Sabih Cc: James Coleman , Peter Geoghegan , Simon Riggs , Shaun Thomas , Dmitry Dolgov <9erthalion6@gmail.com>, Alexander Korotkov , Tom Lane , PostgreSQL Developers Subject: Re: [PATCH] Incremental sort (was: PoC: Partial sort) Message-ID: <20190909215538.42hrv6j4z5ztcft4@development> References: <20190720152512.jpdi2g3notbjcxsd@development> <20190720165951.m6adwbqi26bsfbjb@development> <20190721113422.hjubqs45xxpnldn7@development> <20190730001711.hprrcx3ntk57wuqv@development> <20190904191710.gogtnktjbvtg5zq3@development> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20190904191710.gogtnktjbvtg5zq3@development> User-Agent: NeoMutt/20180716-1444-295967 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On Wed, Sep 04, 2019 at 09:17:10PM +0200, Tomas Vondra wrote: >On Wed, Sep 04, 2019 at 11:37:48AM +0200, Rafia Sabih wrote: >>On Tue, 30 Jul 2019 at 02:17, Tomas Vondra >>wrote: >> >>>On Sun, Jul 21, 2019 at 01:34:22PM +0200, Tomas Vondra wrote: >>>> >>>> ... >>>> >>>>I wonder if we're approaching this wrong. Maybe we should not reverse >>>>engineer queries for the various places, but just start with a set of >>>>queries that we want to optimize, and then identify which places in the >>>>planner need to be modified. >>>> >>> >>>I've decided to do a couple of experiments, trying to make my mind about >>>which modified places matter to diffrent queries. But instead of trying >>>to reverse engineer the queries, I've taken a different approach - I've >>>compiled a list of queries that I think are sensible and relevant, and >>>then planned them with incremental sort enabled in different places. >>> >>>I don't have any clear conclusions at this point - it does show some of >>>the places don't change plan for any of the queries, although there may >>>be some additional query where it'd make a difference. >>> >>>But I'm posting this mostly because it might be useful. I've initially >>>planned to move changes that add incremental sort paths to separate >>>patches, and then apply/skip different subsets of those patches. But >>>then I realized there's a better way to do this - I've added a bunch of >>>GUCs, one for each such place. This allows doing this testing without >>>having to rebuild repeatedly. >>> >>>I'm not going to post the patch(es) with extra GUCs here, because it'd >>>just confuse the patch tester, but it's available here: >>> >>> https://github.com/tvondra/postgres/tree/incremental-sort-20190730 >>> >>>There are 10 GUCs, one for each place in planner where incremental sort >>>paths are constructed. By default all those are set to 'false' so no >>>incremental sort paths are built. If you do >>> >>> SET devel_create_ordered_paths = on; >>> >>>it'll start creating the paths in non-parallel in create_ordered_paths. >>>Then you may enable devel_create_ordered_paths_parallel to also consider >>>parallel paths, etc. >>> >>>The list of queries (synthetic, but hopefully sufficiently realistic) >>>and a couple of scripts to collect the plans is in this repository: >>> >>> https://github.com/tvondra/incremental-sort-tests-2 >>> >>>There's also a spreadsheet with a summary of results, with a visual >>>representation of which GUCs affect which queries. >>> >>Wow, that sounds like an elaborate experiment. But where is this >>spreadsheet you mentioned ? >> > >It seems I forgot to push the commit containing the spreadsheet with >results. I'll fix that tomorrow. > OK, I've pushed the commit with the spreadsheet. The single sheet lists the synthetic queries, and hashes of plans with different flags enables (parallel query, force incremental sort, and the new developer GUCs mentioned before). Only a single developer flag is set to true (or none of them). The columns at the end simply say whether the plan differs from the plan generated by master (no patches). TRUE means "same as master" while FALSE means "different plan. The "patched" column means all developer GUCs disabled, so it's expected to produce the same plan as master (and it is). And then there's one column for each developer GUC. If the column is just TRUE it means the GUC does not affect any of the synthetic queries. There are 4 of them: - devel_add_paths_to_grouping_rel_parallel - devel_create_partial_grouping_paths - devel_gather_grouping_paths - devel_standard_join_search The places controlled by those GUCs are either useless, or the query affected by them is not included in the list of queries. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services