Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nACQs-0001rC-CB for pgsql-performance@arkaria.postgresql.org; Wed, 19 Jan 2022 14:59:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nACQr-0008GH-6K for pgsql-performance@arkaria.postgresql.org; Wed, 19 Jan 2022 14:59:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nABOf-0000SC-PA for pgsql-performance@lists.postgresql.org; Wed, 19 Jan 2022 13:53:10 +0000 Received: from sonic315-54.consmr.mail.gq1.yahoo.com ([98.137.65.30]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nABOY-0005I9-PV for pgsql-performance@postgresql.org; Wed, 19 Jan 2022 13:53:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1642600380; bh=UG44wnWBs3lWGDrKcX3jkRw2r1nQfURoBE2uxCfWSs8=; h=Date:From:To:Subject:References:From:Subject:Reply-To; b=X73W4IvxLV/8VqjX2a8sM/OLC0RCtE2wk5ytBJHttorgpbpGQJ8sPV8PG67I1e0eTDTIxf0yxxge5BJEdfTp/xvAdqvavuWkuPCkTwXIhFdsr5cFX+VK0Sr+9NSlp4R32GFP3J/niAYiVS4JCyDntZZ64FArirOC47X8YnnC1MNUjJD7jezQ751Xq+7cU0KzGhKM1tUzQE0bqeVKO1xAEwlJG8I2jxfy+37gR4uXz99DdfhfmNhLb69I9VkTvPIC7j9hn+jTMX16cQo0ynQqjpJo3MuD+dpj2ZkGpAcvISrpCS9T3CjumakWEyR3+CmQv0iVWfEC/Ev5KMZgvdowog== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1642600380; bh=KyKINeueo7cGzXcz9/jjDkhDsS7VB/JPOp5RR+S+2gn=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=rhTVtJFqBCXXKE5ibtSUz/wjVC1ITq+Os04ESfMKbYq2+55P5jRxoFkvJNPRwTD1t/CiA9P7MuUiNIMbmJ5HDaycsLTocXbqBUrASKU/sVTmWqgoyXKZjVsM9DGByQ36wnmQM+Q0aQROxCpnk411T/2yLgtbyPuXXnDZ/n+R41hPjFlEL7ZxiEeQntHK5CP68HzQL8rfQRKza/spqwi0qUY1WvsNYs+5Y/ASWbjYXksYTYu7uK4+CH7tsyh3R2LAsk/XIJAz1gENYklg/56JrZRDCrWOifN5N86BsRTTTEaQXbwkM+l5dCCAuTWIvK4rDIPo4ImM7D7HkXLg6Vwbaw== X-YMail-OSG: ImPi4YUVM1k1B5EjRq5Qo1df1qLtRW.Si1ilyAWW1qRLVu6RLpMsk3qpEtA6kSG ntFREKZNQIXJnBSwmhQRsGLky3B1YrMSAhZCYa8cHEWGSscIh14y.WfU0Qt88YCqZ2bGDKAQhkSZ _Vl0R567Y4tIYX.wu9bXajQKCImIA3T_A_IDuC_DhD764FQKnk9LB_D23EXfOYiOWd8KrQ.jit1d JajwOUazSKrLvGDmg8C6.nHuuomWoMZfdRDj5nl57qvz.V9Fuvzt_pNFl5sbXzmu6wCnYlhAmk3N NxSNCRFeNUcgFIUa_6wdM0CouTEZSrTSyqh369TJHaQfAsr1EZDpBLlzOZYKLzIgnztdKJfToBcb q224DzFMlXxnutCNkv.WdOnp81V0zMbeQgZ5bbjWe2r4oXks284hkhFRuRcp8FW5prY78ozfEzSm ByKt18XrKKPAO7hOxDaOfiy6RksHD7QHuCb5HxUttLUovQFYy4i796NI9qx0qVNio4Wz6gGguma0 n1ANGrWX3uaDHd2AaInyX.x3XgeyYBQDYyFXAsWLMy2siuHM2Q4YAk61VMLq_Pl4bk5I2etSpauk HXtqXrLvzm4Tp1yartxg86tazv9JwlYAwI_nsZn0ZKE38z.5ho7semQKQ4AuS4AeQEbrSpLSRyt1 Q73dmhUI6DYR5uZ7fY8O8q7fNyFRqckuljfGqCJFxNP1XRHZFB_0hrOuAGStB.mIIto_Nd4xOycS 9FXicobzQWh9DUlORvhxnRsxT24BXVHPkuKqvC_GRofe57oVCRpy4RtXn8T6sLaFq1PtW3l_v_dd J.woPrDe2E9LZX0Ms4C.D.MR6YBrho0yYJCarsmEnngopQCYVxmRyitXnO.YWDTmSNJen61DK1K2 2vlzeowztjfHkW_I8ctXSawDP7z9YqxTHASeO5nV760g.FbTyh0Be3Mb7LhRWXJOPZXTvMobY6D4 DOxjyD6N1bv04dFS80235bxmHOrtU5f8FI9pQg8js.I3..O8_ZyHG0CynLIspFvbZz_cM0ulrmXq cLdQjQfKHbryttGqot.I2nOQkadYLIhS7ELj0vggpNOp12JncRVozzraxDkR0K3dlzgbLQ7nDmA7 in.7_3ujr4t8dKbfMtIPSARB4oyYVO7RSpQ7wx6.4e8UMJ0Q5zZA0BR1zX6g_YWXGj8UXuQYx4FB 1Ns4_S6rs23HcY6OvsPhGhHQ94V3_JSBkm9Kgg0DPtz9Dk_WfdI8LrE5nw5AA5sIk3fIko5yxY8m oVpJuf1Cn7r3fEnlYCPj_GJ6WHKyFYmcbxgQmKF5gktSM0zF19WiGvwxWeUPn3yxyTaxB5gM44T6 UpA6Ge_UeJsiYUOlGr0JRe0T7509lrYTBkeYnquYboMkHh2tf6z1YY13_WXz7EyO45_761ssk.i_ 4uyZcjAM43SoicoDrLCCI9GR25rBoTI36wPrCN4id7ro05fg90j9VkRZcCD1xE1sT0F.nU1DS6kD zwT4GZdSeqP9wOEugDGur07.mewrBFILAvIvEin07tUvloX9WaH5L9ZW7aLDtqnAUrwQKNA2jEtj 9.lH7hdAqI5pu5WrLeYPD_E8AabON32yJJCQgxlB5xocs.cTGd4z_5Mps4cyZWoouGplMJeowKky cjbTJf7D364Cr57xGoCDq7uhyLiBTMilrAad3CZXSL_hO54yjdNYe8I2VUPHwWRSonMYtZoA_p4d h_d1TkJONvA5nKOm3y6Bf_brgWJDaDN4KprWgewz9vsBM2F1h1jh8DJr4NeZ3zMG9guXZuUbaw_B 8I8AYxf3NDFvYEAg0k_XRTnVrsr28g3aK7Y6lhU5TdVXNN_NE2PgDoAzcL5hHpbWWHH4iyvWgsZw MpcAJ8Aa3ZR8t3.SMkes81baWyd98S6Vc8yWJ958EC7u9TZL_d62XPg_lbnYh.2eZVLUC7CKkieg kBaNd8X3reXExbUDARvEEOhc77H73qYwQeO26Drq1suVsKnlUBZcg5p6heoRkNBaILdBuuRIP2Uc 0TQyenjd8qFDWWRcKp6waGNTuqftklHS2aSYvVFKcE1gz65I0NgL6oIpv1IESLUftaIXKqyRq02J mgr9h0nazXaL22JXyyi31AvH5ZFMOFdEF1Muu5iMBX7751vvQa6O3a.uGWkeO7ibT9Uh1cxmyXet _oM6WTY1pwzV1P3kLZ_lMeqMaliWPR.Hyg3hbkGZJbxZ3mAw9Y8jfty9Dda3ntlghuJwu2HHQYmR O2w-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic315.consmr.mail.gq1.yahoo.com with HTTP; Wed, 19 Jan 2022 13:53:00 +0000 Date: Wed, 19 Jan 2022 13:52:55 +0000 (UTC) From: Ludwig Isaac Lim To: "pgsql-performance@postgresql.org" Message-ID: <1017307461.1415193.1642600375850@mail.yahoo.com> Subject: PostgreSQL 12.8 Same Query Same Execution Plan Different Time MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable References: <1017307461.1415193.1642600375850.ref@mail.yahoo.com> X-Mailer: WebService/1.1.19594 YMailNorrin Content-Length: 8044 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello: I ran 2 same queries on PostgreSQL 12.8 machine running in AWS RDS, the fir= st time I ran the query the query plan was: GroupAggregate=C2=A0=C2=A0(cost=3D455652.07..455664.99 rows=3D340 width=3D1= 6) (actual time=3D124047.119..124048.777 rows=3D294 loops=3D1) =C2=A0=C2=A0 Group Key: dvh.history_date =C2=A0=C2=A0 ->=C2=A0=C2=A0Sort=C2=A0=C2=A0(cost=3D455652.07..455655.24 row= s=3D1269 width=3D8) (actual time=3D124046.989..124047.857 rows=3D7780 loops= =3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Sort Key: dvh.history_date =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Sort Method: quicksort=C2= =A0=C2=A0Memory: 557kB =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ->=C2=A0=C2=A0Nested Loop= =C2=A0=C2=A0(cost=3D13708.92..455586.66 rows=3D1269 width=3D8) (actual time= =3D12.228..124039.597 rows=3D7780 loops=3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 ->=C2=A0=C2=A0HashAggregate=C2=A0=C2=A0(cost=3D13708.35..13746.45= rows=3D3810 width=3D4) (actual time=3D12.210..21.629 rows=3D6119 loops=3D1= ) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Group Key: pdv.id =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ->=C2=A0=C2=A0Nested Loop=C2= =A0=C2=A0(cost=3D0.84..13698.83 rows=3D3810 width=3D4) (actual time=3D0.038= ..10.650 rows=3D6119 loops=3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 ->=C2=A0=C2=A0Index Scan using idx_pc_device_acct_num on pc_devices= =C2=A0=C2=A0(cost=3D0.42..565.32 rows=3D506 width=3D4) (actual time=3D0.014= ..0.193 rows=3D396 loops=3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index Cond: ((account_number)::t= ext =3D 'AB32823833'::text) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 ->=C2=A0=C2=A0Index Scan using pdv_uindex on pdv=C2=A0=C2=A0(cost=3D= 0.42..25.73 rows=3D23 width=3D8) (actual time=3D0.007..0.024 rows=3D15 loop= s=3D396) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index Cond: (pc_device_id =3D pc= _devices.id) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 ->=C2=A0=C2=A0Index Scan using idx_pc_dvh_dvh_id on pdv_history d= vh=C2=A0=C2=A0(cost=3D0.57..115.96 rows=3D1 width=3D12) (actual time=3D0.34= 2..20.265 rows=3D1 loops=3D6119) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index Cond: (pdv_id =3D pdv.i= d) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Filter: (status_changed AND (= status_id =3D 1)) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Rows Removed by Filter: 187 Planning Time: 1.050 ms Execution Time: 124048.850 ms After that, I reran the same query again. The plan is basically the same: GroupAggregate=C2=A0=C2=A0(cost=3D455652.07..455664.99 rows=3D340 width=3D1= 6) (actual time=3D12180.624..12182.286 rows=3D294 loops=3D1) =C2=A0=C2=A0 Group Key: dvh.history_date =C2=A0=C2=A0 ->=C2=A0=C2=A0Sort=C2=A0=C2=A0(cost=3D455652.07..455655.24 row= s=3D1269 width=3D8) (actual time=3D12180.493..12181.363 rows=3D7780 loops= =3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Sort Key: dvh.history_date =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Sort Method: quicksort=C2= =A0=C2=A0Memory: 557kB =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ->=C2=A0=C2=A0Nested Loop= =C2=A0=C2=A0(cost=3D13708.92..455586.66 rows=3D1269 width=3D8) (actual time= =3D1709.341..12177.249 rows=3D7780 loops=3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 ->=C2=A0=C2=A0HashAggregate=C2=A0=C2=A0(cost=3D13708.35..13746.45= rows=3D3810 width=3D4) (actual time=3D1709.319..1713.171 rows=3D6119 loops= =3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Group Key: pdv.id =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ->=C2=A0=C2=A0Nested Loop=C2= =A0=C2=A0(cost=3D0.84..13698.83 rows=3D3810 width=3D4) (actual time=3D0.379= ..1706.606 rows=3D6119 loops=3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 ->=C2=A0=C2=A0Index Scan using idx_pc_device_acct_num on pc_devices= =C2=A0=C2=A0(cost=3D0.42..565.32 rows=3D506 width=3D4) (actual time=3D0.013= ..0.279 rows=3D396 loops=3D1) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index Cond: ((account_number)::t= ext =3D 'AB32823833'::text) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 ->=C2=A0=C2=A0Index Scan using pdv_uindex on pdv=C2=A0=C2=A0(cost=3D= 0.42..25.73 rows=3D23 width=3D8) (actual time=3D0.289..4.306 rows=3D15 loop= s=3D396) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index Cond: (pc_device_id =3D pc= _devices.id) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 ->=C2=A0=C2=A0Index Scan using idx_pc_dvh_dvh_id on pdv_history d= vh=C2=A0=C2=A0(cost=3D0.57..115.96 rows=3D1 width=3D12) (actual time=3D0.06= 3..1.709 rows=3D1 loops=3D6119) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index Cond: (pdv_id =3D pdv.i= d) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Filter: (status_changed AND (= status_id =3D 1)) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Rows Removed by Filter: 187 Planning Time: 1.262 ms Execution Time: 12182.361 ms But the gap in the execution time between the two same queries is quite hug= e : 2 minutes vs 12 seconds. I noticed that different is actually in=C2=A0Nested Loop=C2=A0join. One is = taking 2 minutes, other is taking 12 seconds. I find this puzzling as I ass= ume the nested loop should be done in memory. The disk is=C2=A0gp2 SDD=C2=A0so I'm even more baffled by this. What could = be the factors that affect the speed of nested loop. I notice for that both= loops the=C2=A0rows=C2=A0is 7780 and=C2=A0loops=C2=A0is 1. I don't think t= hose are big numbers It was only after the running the 2 queries that I realize I could do=C2=A0= EXPLAIN (ANALYZE, BUFFERS), but I couldn't reproduce the slowness. Below are other information that might be relevant: The database has been vacuum analyzed before running the queries. Platform : AWS RDS PG version : 12.8 effective_cache_size : 7.9 GB (7935800kB) shared_buffers : 3.9 GB (3967896kB) work_mem : 64MB random_page_cost : 1.1 Instance type : db.m6g.xlarge (4 vCPUs / 32 GB RAM) Database is idle. I'm the only one running the query version : PostgreSQL 12.8 on aarch64-unknown-linux-gnu, compiled by gcc (GC= C) 7.3.1 20180712 (Red Hat 7.3.1-6), 64-bit Thanks, Ludwig