Re: Query Tuning
Avin Kavish <[email protected]> Sat, 28 Sep 2019 19:40:25 +0530
| Newsgroups | gmane.comp.db.postgresql.admin |
|---|---|
| Message-ID | <CAFpscOQ-BNJm3aVRQNm7uTPj79KFZmWg4xXez9k==Q-ip=22ow@mail.gmail.com> |
Hi Naveen, Have you heard of https://explain.depesz.com/ ? It will give you a great cost and time breakdown along with an in-depth explanation of each of these operations in a readable format. Just copy and paste the query plan into it. On Sat, Sep 28, 2019 at 7:33 PM Naveen Sankineni <[email protected]> wrote: > Would you please help me understand which subquery is taking more time > from the below SQL and explain plan of the query. > > SQL text > > SELECT > "v_associated_team_component"."role_extension","v_associated_team_component"."team_hier_id_asso","v_associated_team_component"."component_type_id","v_associated_team_component"."component_key_id" > FROM "ifcauth"."v_associated_team_component" > "v_associated_team_component"; > > > VIEW > > > CREATE OR REPLACE VIEW ifcauth.v_associated_team_component AS > SELECT th.component_team_hier_id AS team_hier_id, > th.component_type_id, > th.component_key_id::bigint AS component_key_id, > th.component_team_hier_id AS team_hier_id_asso, > th.component_type_id AS component_type_id_asso, > th.component_key_id AS component_key_id_asso, > 'Self'::text AS association_type, > 'Self'::character varying AS association_desc, > CASE > WHEN p.managing_unit_code IS NULL THEN NULL::text > WHEN p.managing_unit_code::text = 'A'::text THEN 'AMC'::text > ELSE 'Non-AMC'::text > END AS role_extension > FROM team.component_team_hierarchy th > LEFT JOIN platformsource.platform p ON th.component_key_id = > p.platform_id::numeric AND (th.component_type_id = ANY (ARRAY[104::numeric, > 107::numeric])) > UNION ALL > SELECT ph.project_hierarchy_id AS team_hier_id, > ph.component_type_id, > ph.project_id AS component_key_id, > ath.component_team_hier_id AS team_hier_id_asso, > ath.component_type_id AS component_type_id_asso, > ath.component_key_id AS component_key_id_asso, > 'Project-Region'::text AS association_type, > r.region_nme AS association_desc, > NULL::text AS role_extension > FROM team.component_team_hierarchy ath, > reference.region r, > ifcauth.v_project_hierarchy_data ph > WHERE ath.component_type_id = 106::numeric AND r.region_code::text = > to_char(ath.component_key_id) AND ph.region_code::text = > to_char(ath.component_key_id) > UNION ALL > SELECT ih.project_component_team_hier_id AS team_hier_id, > 102::numeric(10,0) AS component_type_id, > ih.project_id AS component_key_id, > COALESCE(od.component_team_hier_id, ih.component_team_hier_id) AS > team_hier_id_asso, > COALESCE(od.component_type_id, ih.component_type_id) AS > component_type_id_asso, > ih.platform_id AS component_key_id_asso, > 'Project-Platform:Association'::text AS association_type, > 'Project-Platform:Association-Inheritance/Override'::character varying > AS association_desc, > CASE > WHEN pl.managing_unit_code::text = 'A'::text THEN 'AMC'::text > ELSE 'Non-AMC'::text > END AS role_extension > FROM ( SELECT ip.project_id, > chp.component_team_hier_id AS project_component_team_hier_id, > ip.platform_id, > ch.component_type_id, > ch.component_team_hier_id > FROM project.is_project ip > JOIN team.component_team_hierarchy chp ON > ip.project_id::numeric = chp.component_key_id AND chp.component_type_id = > 102::numeric > JOIN team.component_team_hierarchy ch ON > ip.platform_id::numeric = ch.component_key_id AND ch.component_type_id = > 104::numeric > UNION > SELECT pr.project_id, > chp.component_team_hier_id AS project_component_team_hier_id, > c.platform_id, > ch.component_type_id, > ch.component_team_hier_id > FROM product.product pr > JOIN team.component_team_hierarchy chp ON > pr.project_id::numeric = chp.component_key_id AND chp.component_type_id = > 102::numeric > JOIN product.product_source_participation psp ON > pr.product_nbr = psp.product_nbr AND psp.snapshot_nbr = 0 AND > psp.active_ind = 'Y'::bpchar > JOIN platformsource.contribution c ON c.contribution_id = > psp.contribution_id AND c.platform_id IS NOT NULL > JOIN team.component_team_hierarchy ch ON > c.platform_id::numeric = ch.component_key_id AND ch.component_type_id = > 104::numeric > WHERE pr.snapshot_nbr = 0) ih > JOIN platformsource.platform pl ON pl.platform_id = ih.platform_id > LEFT JOIN ( SELECT > to_number("substring"(a.component_team_hier_id::text, 4, 7)) AS project_id, > a.component_key_id AS platform_id, > 107::numeric(10,0) AS component_type_id, > a.component_team_hier_id > FROM team.component_team_hierarchy a > > WHERE a.active_ind = 'Y'::bpchar AND a.component_type_id = > 107::numeric) od ON ih.project_id::numeric = od.project_id AND > ih.platform_id::numeric = od.platform_id; > > > > explain plan > > > > > > QUERY PLAN > > > > > ------------------------------------------------------------------------------------------------------------------------------------------------------------- > > > -------------------------------------------------------------------------------------- > > Subquery Scan on v_associated_team_component (cost=3.44..26570.46 > rows=190940 width=64) (actual time=0.129..50798.804 rows=206165 loops=1) > > -> Append (cost=3.44..24661.06 rows=190940 width=184) (actual > time=0.128..50748.433 rows=206165 loops=1) > > -> Hash Left Join (cost=3.44..6653.80 rows=188724 width=136) > (actual time=0.128..242.968 rows=188908 loops=1) > > Hash Cond: (th.component_key_id = (p.platform_id)::numeric) > > Join Filter: (th.component_type_id = ANY > ('{104,107}'::numeric[])) > > Rows Removed by Join Filter: 16 > > -> Seq Scan on component_team_hierarchy th > (cost=0.00..4762.24 rows=188724 width=19) (actual time=0.019..47.806 > rows=188908 loops=1) > > -> Hash (cost=2.64..2.64 rows=64 width=10) (actual > time=0.063..0.063 rows=65 loops=1) > > Buckets: 1024 Batches: 1 Memory Usage: 11kB > > -> Seq Scan on platform p (cost=0.00..2.64 rows=64 > width=10) (actual time=0.010..0.032 rows=65 loops=1) > > -> Hash Join (cost=7624.30..9591.92 rows=2214 width=134) > (actual time=129.872..47733.251 rows=12646 loops=1) > > Hash Cond: ((p_1.region_code)::text = (r.region_code)::text) > > -> Nested Loop Left Join (cost=7623.09..9584.52 rows=65 > width=29) (actual time=129.758..47645.026 rows=12646 loops=1) > > Join Filter: (__unnamed_subquery_0.project_id = > p_1.project_id) > > Rows Removed by Join Filter: 247824194 > > -> Hash Join (cost=5234.06..6487.82 rows=65 > width=29) (actual time=76.561..154.499 rows=12646 loops=1) > > Hash Cond: ((p_1.region_code)::text = > (ath.component_key_id)::text) > > -> Seq Scan on project p_1 > (cost=0.00..1128.56 rows=19927 width=10) (actual time=0.018..34.051 > rows=20132 loops=1) > > Filter: (snapshot_nbr = 0) > > Rows Removed by Filter: 1516 > > -> Hash (cost=5234.05..5234.05 rows=1 > width=19) (actual time=76.505..76.505 rows=7 loops=1) > > Buckets: 1024 Batches: 1 Memory Usage: > 9kB > > -> Seq Scan on component_team_hierarchy > ath (cost=0.00..5234.05 rows=1 width=19) (actual time=0.014..76.483 rows=7 > loops=1 > > ) > > Filter: (component_type_id = > '106'::numeric) > > Rows Removed by Filter: 188901 > > -> Materialize (cost=2389.03..3004.31 rows=95 > width=8) (actual time=0.004..1.289 rows=19598 loops=12646) > > -> Subquery Scan on __unnamed_subquery_0 > (cost=2389.03..3003.83 rows=95 width=8) (actual time=49.281..124.294 > rows=19598 loops=1 > > ) > > Filter: (__unnamed_subquery_0.rn = 1) > > -> WindowAgg (cost=2389.03..2767.37 > rows=18917 width=48) (actual time=49.275..96.747 rows=19598 loops=1) > > -> Sort (cost=2389.03..2436.32 > rows=18917 width=16) (actual time=49.238..87.108 rows=19598 loops=1) > > Sort Key: > project_status_history.project_id, project_status_history.status_start_date > > Sort Method: quicksort > Memory: 1687kB > > -> Seq Scan on > project_status_history (cost=0.00..1045.22 rows=18917 width=16) (actual > time=0.025..31.698 rows > > =19598 loops=1) > > Filter: > ((status_end_date IS NULL) AND (snapshot_nbr = 0)) > > Rows Removed by Filter: > 12579 > > -> Hash (cost=1.09..1.09 rows=9 width=21) (actual > time=0.035..0.035 rows=9 loops=1) > > Buckets: 1024 Batches: 1 Memory Usage: 9kB > > -> Seq Scan on region r (cost=0.00..1.09 rows=9 > width=21) (actual time=0.010..0.012 rows=9 loops=1) > > -> Subquery Scan on "*SELECT* 3" (cost=6488.52..6505.97 rows=2 > width=184) (actual time=120.270..2744.493 rows=4611 loops=1) > > -> Nested Loop Left Join (cost=6488.52..6505.95 rows=2 > width=160) (actual time=120.263..2742.226 rows=4611 loops=1) > > -> Hash Join (cost=6488.10..6491.00 rows=2 > width=50) (actual time=119.698..122.981 rows=4611 loops=1) > > Hash Cond: (pl.platform_id = ih.platform_id) > > -> Seq Scan on platform pl (cost=0.00..2.64 > rows=64 width=10) (actual time=0.015..0.047 rows=65 loops=1) > > -> Hash (cost=6488.08..6488.08 rows=2 > width=48) (actual time=119.551..119.551 rows=4611 loops=1) > > Buckets: 8192 (originally 1024) Batches: > 1 (originally 1) Memory Usage: 389kB > > -> Subquery Scan on ih > (cost=6488.03..6488.08 rows=2 width=48) (actual time=115.218..118.647 > rows=4611 loops=1) > > -> Unique (cost=6488.03..6488.06 > rows=2 width=48) (actual time=115.216..118.055 rows=4611 loops=1) > > -> Sort > (cost=6488.03..6488.03 rows=2 width=48) (actual time=115.216..115.984 > rows=9044 loops=1) > > Sort Key: > ip.project_id, chp.component_team_hier_id, ip.platform_id, > ch.component_type_id, ch.component_te > > am_hier_id > > Sort Method: quicksort > Memory: 1091kB > > -> Append > (cost=500.53..6488.02 rows=2 width=48) (actual time=4.992..109.490 > rows=9044 loops=1) > > -> Nested Loop > (cost=500.53..5845.37 rows=1 width=37) (actual time=4.991..48.698 rows=3714 > loops=1 > > ) > > -> Hash > Join (cost=500.11..5842.00 rows=2 width=29) (actual time=4.948..35.412 > rows=3797 loo > > ps=1) > > Hash > Cond: (ch.component_key_id = (ip.platform_id)::numeric) > > -> > Seq Scan on component_team_hierarchy ch (cost=0.00..5234.05 rows=38 > width=19) (actu > > al time=0.559..29.770 rows=22 loops=1) > > > Filter: (component_type_id = '104'::numeric) > > > Rows Removed by Filter: 188886 > > -> > Hash (cost=358.38..358.38 rows=11338 width=16) (actual time=4.333..4.333 > rows=4295 > > loops=1) > > > Buckets: 16384 Batches: 1 Memory Usage: 330kB > > > -> Seq Scan on is_project ip (cost=0.00..358.38 rows=11338 width=16) > (actual tim > > e=0.017..2.979 rows=11479 loops=1) > > -> Index > Scan using idx_component_team_key on component_team_hierarchy chp > (cost=0.42..1.68 > > rows=1 width=14) (actual time=0.003..0.003 rows=1 loops=3797) > > Index > Cond: ((component_key_id = (ip.project_id)::numeric) AND (component_type_id > = '102 > > '::numeric)) > > -> Nested Loop > (cost=1.42..642.62 rows=1 width=37) (actual time=0.211..59.920 rows=5330 > loops=1) > > -> Nested > Loop (cost=0.99..637.08 rows=3 width=29) (actual time=0.197..40.469 > rows=5347 loop > > s=1) > > -> > Nested Loop (cost=0.71..636.10 rows=2 width=29) (actual time=0.125..24.609 > rows=534 > > 7 loops=1) > > > -> Nested Loop > (cost=0.42..409.05 rows=1 width=29) (actual time=0.079..0.447 row > > s=37 loops=1) > > > -> Seq Scan on contribution c (cost=0.00..2.66 rows=55 width=16) (actual t > > ime=0.036..0.077 rows=57 loops=1) > > > Filter: (platform_id IS NOT NULL) > > > Rows Removed by Filter: 11 > > > -> Index Scan using idx_component_team_key on component_team_hierarchy ch_1 > > (cost=0.42..7.38 rows=1 width=19) (actual time=0.005..0.005 rows=1 > loops=57) > > > Index Cond: ((component_key_id = (c.platform_id)::numeric) AND (compon > > ent_type_id = '104'::numeric)) > > > -> Index Scan using > pk_product_source_partcptn on product_source_participation ps > > p (cost=0.29..224.92 rows=214 width=16) (actual time=0.071..0.637 > rows=145 loops=37) > > > Index Cond: ((snapshot_nbr = > 0) AND (contribution_id = c.contribution_id)) > > > Filter: (active_ind = 'Y'::bpchar) > > > Rows Removed > by Filter: 9 > > -> > Index Scan using pk_product on product pr (cost=0.29..0.48 rows=1 > width=16) (actual > > time=0.002..0.003 rows=1 loops=5347) > > > Index Cond: ((product_nbr = psp.product_nbr) AND (snapshot_nbr = 0)) > > -> Index > Scan using idx_component_team_key on component_team_hierarchy chp_1 > (cost=0.42..1.8 > > 4 rows=1 width=14) (actual time=0.003..0.003 rows=1 loops=5347) > > Index > Cond: ((component_key_id = (pr.project_id)::numeric) AND (component_type_id > = '102 > > '::numeric)) > > -> Index Scan using idx_component_team_key on > component_team_hierarchy a (cost=0.42..7.46 rows=1 width=30) (actual > time=0.519..0.566 r > > ows=0 loops=4611) > > Index Cond: (((ih.platform_id)::numeric = > component_key_id) AND (component_type_id = '107'::numeric)) > > Filter: ((active_ind = 'Y'::bpchar) AND > ((ih.project_id)::numeric = > to_number("substring"((component_team_hier_id)::text, 4, 7)))) > > Rows Removed by Filter: 382 > > Thanks, > > Naveen. > > >