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.92) (envelope-from ) id 1jGQI8-0002lD-DQ for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2020 16:51:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jGQI7-0007C1-8H for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2020 16:51:07 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jGQI6-0007BS-Rz for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2020 16:51:07 +0000 Received: from mail-qk1-x742.google.com ([2607:f8b0:4864:20::742]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jGQI4-0002mx-1g for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2020 16:51:05 +0000 Received: by mail-qk1-x742.google.com with SMTP id u4so4132599qkj.13 for ; Mon, 23 Mar 2020 09:51:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:subject:message-id:mime-version:content-disposition :content-transfer-encoding:user-agent; bh=6GJJ9YYJVxjD0775CrKieQGeexVjdU7K7NJZxnEn9Gs=; b=TvT5Bb2PfrWipoZcVZHdI5w7SxdjPUERPDEkC42cUmI6+kCs0J1iVk2D6BNS195Zl1 JAAzTxBPWDbpfe/48rOoQILxMAoxMWMsua7NuZEr3Ya+1hR35jyqOVBhhNMQzFT9rbws 4sXeC9NOgk4sCMRrf704N0VMuK5xvT1F8P57d6JqtGyXS0RUzmSc84475JRF3j5AQoUW bTwZ0ebcvBEn3AnfUlfQ5tA1c110eVd+T3uwDm2C4ANCnlFaqvw6T6pvLzTBX/+sUEX+ 0BzHSp4di5j1iqCMV878XBGz3lF6NRckQBLYgq4CUXWADu5G4XD8mbV6rOwQbLEUV6lj /0gg== 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:subject:message-id:mime-version :content-disposition:content-transfer-encoding:user-agent; bh=6GJJ9YYJVxjD0775CrKieQGeexVjdU7K7NJZxnEn9Gs=; b=VgmnwXU+Am/w7CjVEJ+LyvzuvFyP/LGK/M/KD2fW56eN8h5CWTKOgtNO6Z8uCghL39 wz83v8X1rg4u9uQbKp79C3Eq7xqg8OawJKfJIedseqbGiAsQXXTcgRNPJnfNXeF/H+c2 rX02n8ouKoxgb0tQ8Q4Ofp8LExTzs36HykMbHotSC9Bz6lWv71SCBuHBrOJme+xO0nCs HGWfy4e1trxk5dYMlhtlyP6xennTajWqGG7HyYmPYwbJ8AlTdOxgpwRPRF1u54uCaDKL +rQE1A0yWXIHhWuAnRDqrTt4ndrew8RdVfWxxONZ6Ofsz4JXLY6x7pUxhvA+EwJKfOi3 K/7w== X-Gm-Message-State: ANhLgQ2sjKU7WKU6T6XcLqp8Bh9SZjv7LLvAWW7lDW1Ad1kPCFAXi5aA 0MnHKP4juNGFtx8PZln+KMjfujtQqrucAmP2D7dEFjsmZAt2Ab0cLPrBOey+LgL7S2V8SLE+YcV pSrTuA80W3j8p16cEP/c7aZvTySjwF3OW182ZeyUOMyaOWFrzh/eSKyBudcJwYijqePDDQrDV87 NkP2SHHREggbCYKmIw X-Google-Smtp-Source: ADFU+vsVEf1tvn4EnZZT7l1TW5BW/iwXcqzxJeSDdfuiHR5vJorJpY1lnmZkHfI/VZuZbGP7UqaWqQ== X-Received: by 2002:a37:6811:: with SMTP id d17mr21508684qkc.29.1584982262767; Mon, 23 Mar 2020 09:51:02 -0700 (PDT) Received: from nimloth.alvh.no-ip.org ([201.186.208.119]) by smtp.gmail.com with ESMTPSA id r3sm11572551qkd.3.2020.03.23.09.51.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2020 09:51:02 -0700 (PDT) Received: by nimloth.alvh.no-ip.org (Postfix, from userid 1000) id 02DBF300825; Mon, 23 Mar 2020 13:50:59 -0300 (-03) Date: Mon, 23 Mar 2020 13:50:59 -0300 From: Alvaro Herrera To: Pg Hackers Subject: weird hash plan cost, starting with pg10 Message-ID: <20200323165059.GA24950@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable User-Agent: Mutt/1.10.1 (2018-07-13) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Hello While messing with EXPLAIN on a query emitted by pg_dump, I noticed that current Postgres 10 emits weird bucket/batch/memory values for certain hash nodes: -> Hash (cost=3D0.11..0.11 rows=3D10 width=3D12)= (actual time=3D0.002..0.002 rows=3D1 loops=3D8) Buckets: 2139062143 Batches: 2139062143 Me= mory Usage: 8971876904722400kB -> Function Scan on unnest init_1 (cost=3D= 0.01..0.11 rows=3D10 width=3D12) (actual time=3D0.001..0.001 rows=3D1 loops= =3D8) It shows normal values in 9.6. The complete query is: SELECT c.tableoid, c.oid, c.relname, (SELECT pg_catalog.array_agg(acl ORDER= BY row_n) FROM (SELECT acl, row_n FROM pg_catalog.unnest(coalesce(c.relacl= ,pg_catalog.acldefault(CASE WHEN c.relkind =3D 'S' THEN 's' ELSE 'r' END::"= char",c.relowner))) WITH ORDINALITY AS perm(acl,row_n) WHERE NOT EXISTS ( S= ELECT 1 FROM pg_catalog.unnest(coalesce(pip.initprivs,pg_catalog.acldefault= (CASE WHEN c.relkind =3D 'S' THEN 's' ELSE 'r' END::"char",c.relowner))) AS= init(init_acl) WHERE acl =3D init_acl)) as foo) AS relacl, (SELECT pg_cata= log.array_agg(acl ORDER BY row_n) FROM (SELECT acl, row_n FROM pg_catalog.u= nnest(coalesce(pip.initprivs,pg_catalog.acldefault(CASE WHEN c.relkind =3D = 'S' THEN 's' ELSE 'r' END::"char",c.relowner))) WITH ORDINALITY AS initp(ac= l,row_n) WHERE NOT EXISTS ( SELECT 1 FROM pg_catalog.unnest(coalesce(c.rela= cl,pg_catalog.acldefault(CASE WHEN c.relkind =3D 'S' THEN 's' ELSE 'r' END:= :"char",c.relowner))) AS permp(orig_acl) WHERE acl =3D orig_acl)) as foo) a= s rrelacl, NULL AS initrelacl, NULL as initrrelacl, c.relkind, c.relnamespa= ce, (SELECT rolname FROM pg_catalog.pg_roles WHERE oid =3D c.relowner) AS r= olname, c.relchecks, c.relhastriggers, c.relhasindex, c.relhasrules, 'f'::b= ool AS relhasoids, c.relrowsecurity, c.relforcerowsecurity, c.relfrozenxid,= c.relminmxid, tc.oid AS toid, tc.relfrozenxid AS tfrozenxid, tc.relminmxid= AS tminmxid, c.relpersistence, c.relispopulated, c.relreplident, c.relpage= s, am.amname, CASE WHEN c.reloftype <> 0 THEN c.reloftype::pg_catalog.regty= pe ELSE NULL END AS reloftype, d.refobjid AS owning_tab, d.refobjsubid AS o= wning_col, (SELECT spcname FROM pg_tablespace t WHERE t.oid =3D c.reltables= pace) AS reltablespace, array_remove(array_remove(c.reloptions,'check_optio= n=3Dlocal'),'check_option=3Dcascaded') AS reloptions, CASE WHEN 'check_opti= on=3Dlocal' =3D ANY (c.reloptions) THEN 'LOCAL'::text WHEN 'check_option=3D= cascaded' =3D ANY (c.reloptions) THEN 'CASCADED'::text ELSE NULL END AS che= ckoption, tc.reloptions AS toast_reloptions, c.relkind =3D 'S' AND EXISTS (= SELECT 1 FROM pg_depend WHERE classid =3D 'pg_class'::regclass AND objid = =3D c.oid AND objsubid =3D 0 AND refclassid =3D 'pg_class'::regclass AND de= ptype =3D 'i') AS is_identity_sequence, EXISTS (SELECT 1 FROM pg_attribute = at LEFT JOIN pg_init_privs pip ON (c.oid =3D pip.objoid AND pip.classoid = =3D 'pg_class'::regclass AND pip.objsubid =3D at.attnum)WHERE at.attrelid = =3D c.oid AND ((SELECT pg_catalog.array_agg(acl ORDER BY row_n) FROM (SELEC= T acl, row_n FROM pg_catalog.unnest(coalesce(at.attacl,pg_catalog.acldefaul= t('c',c.relowner))) WITH ORDINALITY AS perm(acl,row_n) WHERE NOT EXISTS ( S= ELECT 1 FROM pg_catalog.unnest(coalesce(pip.initprivs,pg_catalog.acldefault= ('c',c.relowner))) AS init(init_acl) WHERE acl =3D init_acl)) as foo) IS NO= T NULL OR (SELECT pg_catalog.array_agg(acl ORDER BY row_n) FROM (SELECT acl= , row_n FROM pg_catalog.unnest(coalesce(pip.initprivs,pg_catalog.acldefault= ('c',c.relowner))) WITH ORDINALITY AS initp(acl,row_n) WHERE NOT EXISTS ( S= ELECT 1 FROM pg_catalog.unnest(coalesce(at.attacl,pg_catalog.acldefault('c'= ,c.relowner))) AS permp(orig_acl) WHERE acl =3D orig_acl)) as foo) IS NOT N= ULL OR NULL IS NOT NULL OR NULL IS NOT NULL))AS changed_acl, pg_get_partkey= def(c.oid) AS partkeydef, c.relispartition AS ispartition, pg_get_expr(c.re= lpartbound, c.oid) AS partbound FROM pg_class c LEFT JOIN pg_depend d ON (c= =2Erelkind =3D 'S' AND d.classid =3D c.tableoid AND d.objid =3D c.oid AND d= =2Eobjsubid =3D 0 AND d.refclassid =3D c.tableoid AND d.deptype IN ('a', 'i= ')) LEFT JOIN pg_class tc ON (c.reltoastrelid =3D tc.oid AND c.relkind <> '= p') LEFT JOIN pg_am am ON (c.relam =3D am.oid) LEFT JOIN pg_init_privs pip = ON (c.oid =3D pip.objoid AND pip.classoid =3D 'pg_class'::regclass AND pip.= objsubid =3D 0) WHERE c.relkind in ('r', 'S', 'v', 'c', 'm', 'f', 'p') ORDE= R BY c.oid I'm not looking into this right now. If somebody is bored in quarantine, they might have a good time bisecting this. --=20 =C1lvaro Herrera