0002-Address-Richard-s-comments-20240724.patch
text/x-patch
Filename: 0002-Address-Richard-s-comments-20240724.patch
Type: text/x-patch
Part: 1
Patch
Format: format-patch
Series: patch 0002
Subject: Address Richard's comments
| File | + | − |
|---|---|---|
| src/backend/optimizer/path/joinrels.c | 8 | 4 |
| src/backend/optimizer/util/relnode.c | 2 | 2 |
| src/include/optimizer/pathnode.h | 1 | 1 |
From ba0eed8f13f65d28abfc934ec08b47c9e9ad9dd1 Mon Sep 17 00:00:00 2001
From: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Date: Wed, 24 Jul 2024 11:55:17 +0530
Subject: [PATCH 2/2] Address Richard's comments
---
src/backend/optimizer/path/joinrels.c | 12 ++++++++----
src/backend/optimizer/util/relnode.c | 4 ++--
src/include/optimizer/pathnode.h | 2 +-
3 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c
index f9ab82a23f..bf4605795a 100644
--- a/src/backend/optimizer/path/joinrels.c
+++ b/src/backend/optimizer/path/joinrels.c
@@ -1547,7 +1547,7 @@ try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2,
RelOptInfo *child_joinrel;
AppendRelInfo **appinfos;
int nappinfos;
- Bitmapset *child_relids = NULL;
+ Relids child_relids;
if (joinrel->partbounds_merged)
{
@@ -1662,8 +1662,7 @@ try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2,
{
child_joinrel = build_child_join_rel(root, child_rel1, child_rel2,
joinrel, child_restrictlist,
- child_sjinfo, appinfos,
- nappinfos);
+ child_sjinfo, nappinfos, appinfos);
joinrel->part_rels[cnt_parts] = child_joinrel;
joinrel->live_parts = bms_add_member(joinrel->live_parts, cnt_parts);
joinrel->all_partrels = bms_add_members(joinrel->all_partrels,
@@ -1680,9 +1679,14 @@ try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2,
child_joinrel, child_sjinfo,
child_restrictlist);
+ /*
+ * When there are thousands of partitions involved, this loop will
+ * accumulate a lot of memory in objects useful only in this loop.
+ * Save it.
+ */
pfree(appinfos);
- free_child_join_sjinfo(child_sjinfo);
bms_free(child_relids);
+ free_child_join_sjinfo(child_sjinfo);
}
}
diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c
index 989bee0fa8..971d1c7aae 100644
--- a/src/backend/optimizer/util/relnode.c
+++ b/src/backend/optimizer/util/relnode.c
@@ -876,13 +876,13 @@ build_join_rel(PlannerInfo *root,
* 'restrictlist': list of RestrictInfo nodes that apply to this particular
* pair of joinable relations
* 'sjinfo': child join's join-type details
- * 'appinfos' and 'nappinfos': AppendRelInfo array for child relids
+ * 'nappinfos' and 'appinfos': AppendRelInfo array for child relids
*/
RelOptInfo *
build_child_join_rel(PlannerInfo *root, RelOptInfo *outer_rel,
RelOptInfo *inner_rel, RelOptInfo *parent_joinrel,
List *restrictlist, SpecialJoinInfo *sjinfo,
- AppendRelInfo **appinfos, int nappinfos)
+ int nappinfos, AppendRelInfo **appinfos)
{
RelOptInfo *joinrel = makeNode(RelOptInfo);
diff --git a/src/include/optimizer/pathnode.h b/src/include/optimizer/pathnode.h
index 71fda9f2a4..f00bd55f39 100644
--- a/src/include/optimizer/pathnode.h
+++ b/src/include/optimizer/pathnode.h
@@ -347,6 +347,6 @@ extern RelOptInfo *build_child_join_rel(PlannerInfo *root,
RelOptInfo *outer_rel, RelOptInfo *inner_rel,
RelOptInfo *parent_joinrel, List *restrictlist,
SpecialJoinInfo *sjinfo,
- AppendRelInfo **appinfos, int nappinfos);
+ int nappinfos, AppendRelInfo **appinfos);
#endif /* PATHNODE_H */
--
2.34.1