Skip to content

Commit 13621dd

Browse files
Fix orca judgement of whether relation is empty is not accurate.
When retrieve RelStats, orca use reltuples is whether -1 to decide relation is empty. However, reltuples 0 also means relation is empty. Authored-by: Zhang Wenchao <[email protected]>
1 parent da0b9d4 commit 13621dd

File tree

5 files changed

+69
-71
lines changed

5 files changed

+69
-71
lines changed

contrib/pax_storage/src/test/regress/expected/DML_over_joins_optimizer.out

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,22 +1613,21 @@ HINT: For non-partitioned tables, run analyze <table_name>(<column_list>). For
16131613
QUERY PLAN
16141614
------------------------------------------------------------------------------
16151615
Delete on tab1
1616-
-> Result
1617-
-> Redistribute Motion 3:3 (slice1; segments: 3)
1618-
Hash Key: tab1.b
1619-
-> Hash Join
1620-
Hash Cond: (tab2.a = tab1.a)
1621-
-> Seq Scan on tab2
1622-
-> Hash
1623-
-> Redistribute Motion 3:3 (slice2; segments: 3)
1624-
Hash Key: tab1.a
1625-
-> Hash Join
1626-
Hash Cond: (tab3.b = tab1.b)
1627-
-> Seq Scan on tab3
1628-
-> Hash
1629-
-> Seq Scan on tab1
1616+
-> Hash Join
1617+
Hash Cond: (tab3.b = tab1.b)
1618+
-> Seq Scan on tab3
1619+
-> Hash
1620+
-> Redistribute Motion 3:3 (slice1; segments: 3)
1621+
Hash Key: tab1.b
1622+
-> Hash Join
1623+
Hash Cond: (tab2.a = tab1.a)
1624+
-> Seq Scan on tab2
1625+
-> Hash
1626+
-> Redistribute Motion 3:3 (slice2; segments: 3)
1627+
Hash Key: tab1.a
1628+
-> Seq Scan on tab1
16301629
Optimizer: GPORCA
1631-
(16 rows)
1630+
(15 rows)
16321631

16331632
-- ----------------------------------------------------------------------
16341633
-- Test: teardown.sql

contrib/pax_storage/src/test/regress/expected/bfv_joins_optimizer.out

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2982,27 +2982,27 @@ ON (member_group.group_id IN (12,13,14,15) AND member_subgroup.subgroup_name = r
29822982
QUERY PLAN
29832983
---------------------------------------------------------------------------------------------
29842984
Gather Motion 3:1 (slice1; segments: 3)
2985-
-> Hash Join
2986-
Hash Cond: (member."group_id" = member_group."group_id")
2987-
-> Seq Scan on member
2988-
-> Hash
2989-
-> Broadcast Motion 3:3 (slice2; segments: 3)
2990-
-> Hash Left Join
2991-
Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text)
2992-
Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[]))
2993-
-> Redistribute Motion 3:3 (slice3; segments: 3)
2994-
Hash Key: member_subgroup.subgroup_name
2995-
-> Hash Join
2996-
Hash Cond: (member_subgroup."group_id" = member_group."group_id")
2997-
-> Redistribute Motion 3:3 (slice4; segments: 3)
2998-
Hash Key: member_subgroup."group_id"
2985+
-> Hash Left Join
2986+
Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text)
2987+
Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[]))
2988+
-> Redistribute Motion 3:3 (slice2; segments: 3)
2989+
Hash Key: member_subgroup.subgroup_name
2990+
-> Hash Join
2991+
Hash Cond: (member."group_id" = member_group."group_id")
2992+
-> Redistribute Motion 3:3 (slice3; segments: 3)
2993+
Hash Key: member."group_id"
2994+
-> Hash Join
2995+
Hash Cond: (member_subgroup."group_id" = member_group."group_id")
2996+
-> Seq Scan on member
2997+
-> Hash
2998+
-> Broadcast Motion 3:3 (slice4; segments: 3)
29992999
-> Seq Scan on member_subgroup
3000-
-> Hash
3001-
-> Seq Scan on member_group
3002-
-> Hash
3003-
-> Redistribute Motion 3:3 (slice5; segments: 3)
3004-
Hash Key: region.county_name
3005-
-> Seq Scan on region
3000+
-> Hash
3001+
-> Seq Scan on member_group
3002+
-> Hash
3003+
-> Redistribute Motion 3:3 (slice5; segments: 3)
3004+
Hash Key: region.county_name
3005+
-> Seq Scan on region
30063006
Optimizer: Pivotal Optimizer (GPORCA)
30073007
(23 rows)
30083008

src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1836,7 +1836,7 @@ CTranslatorRelcacheToDXL::RetrieveRelStats(CMemoryPool *mp, IMDId *mdid)
18361836
* count of the partition table is -1.
18371837
*/
18381838
BOOL relation_empty = false;
1839-
if (num_rows == -1.0)
1839+
if (num_rows == -1.0 || num_rows == 0.0)
18401840
{
18411841
relation_empty = true;
18421842
}

src/test/regress/expected/DML_over_joins_optimizer.out

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,22 +1774,21 @@ HINT: For non-partitioned tables, run analyze <table_name>(<column_list>). For
17741774
QUERY PLAN
17751775
------------------------------------------------------------------------------
17761776
Delete on tab1
1777-
-> Result
1778-
-> Redistribute Motion 3:3 (slice1; segments: 3)
1779-
Hash Key: tab1.b
1780-
-> Hash Join
1781-
Hash Cond: (tab2.a = tab1.a)
1782-
-> Seq Scan on tab2
1783-
-> Hash
1784-
-> Redistribute Motion 3:3 (slice2; segments: 3)
1785-
Hash Key: tab1.a
1786-
-> Hash Join
1787-
Hash Cond: (tab3.b = tab1.b)
1788-
-> Seq Scan on tab3
1789-
-> Hash
1790-
-> Seq Scan on tab1
1777+
-> Hash Join
1778+
Hash Cond: (tab3.b = tab1.b)
1779+
-> Seq Scan on tab3
1780+
-> Hash
1781+
-> Redistribute Motion 3:3 (slice1; segments: 3)
1782+
Hash Key: tab1.b
1783+
-> Hash Join
1784+
Hash Cond: (tab2.a = tab1.a)
1785+
-> Seq Scan on tab2
1786+
-> Hash
1787+
-> Redistribute Motion 3:3 (slice2; segments: 3)
1788+
Hash Key: tab1.a
1789+
-> Seq Scan on tab1
17911790
Optimizer: GPORCA
1792-
(16 rows)
1791+
(15 rows)
17931792

17941793
-- ----------------------------------------------------------------------
17951794
-- Test delete on partition table from join on another partition table

src/test/regress/expected/bfv_joins_optimizer.out

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3294,27 +3294,27 @@ ON (member_group.group_id IN (12,13,14,15) AND member_subgroup.subgroup_name = r
32943294
QUERY PLAN
32953295
---------------------------------------------------------------------------------------------
32963296
Gather Motion 3:1 (slice1; segments: 3)
3297-
-> Hash Join
3298-
Hash Cond: (member."group_id" = member_group."group_id")
3299-
-> Seq Scan on member
3300-
-> Hash
3301-
-> Broadcast Motion 3:3 (slice2; segments: 3)
3302-
-> Hash Left Join
3303-
Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text)
3304-
Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[]))
3305-
-> Redistribute Motion 3:3 (slice3; segments: 3)
3306-
Hash Key: member_subgroup.subgroup_name
3307-
-> Hash Join
3308-
Hash Cond: (member_subgroup."group_id" = member_group."group_id")
3309-
-> Redistribute Motion 3:3 (slice4; segments: 3)
3310-
Hash Key: member_subgroup."group_id"
3297+
-> Hash Left Join
3298+
Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text)
3299+
Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[]))
3300+
-> Redistribute Motion 3:3 (slice2; segments: 3)
3301+
Hash Key: member_subgroup.subgroup_name
3302+
-> Hash Join
3303+
Hash Cond: (member."group_id" = member_group."group_id")
3304+
-> Redistribute Motion 3:3 (slice3; segments: 3)
3305+
Hash Key: member."group_id"
3306+
-> Hash Join
3307+
Hash Cond: (member_subgroup."group_id" = member_group."group_id")
3308+
-> Seq Scan on member
3309+
-> Hash
3310+
-> Broadcast Motion 3:3 (slice4; segments: 3)
33113311
-> Seq Scan on member_subgroup
3312-
-> Hash
3313-
-> Seq Scan on member_group
3314-
-> Hash
3315-
-> Redistribute Motion 3:3 (slice5; segments: 3)
3316-
Hash Key: region.county_name
3317-
-> Seq Scan on region
3312+
-> Hash
3313+
-> Seq Scan on member_group
3314+
-> Hash
3315+
-> Redistribute Motion 3:3 (slice5; segments: 3)
3316+
Hash Key: region.county_name
3317+
-> Seq Scan on region
33183318
Optimizer: Pivotal Optimizer (GPORCA)
33193319
(23 rows)
33203320

0 commit comments

Comments
 (0)