| From: | Richard Guo <guofenglinux(at)gmail(dot)com> |
|---|---|
| To: | Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com> |
| Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Memory consumed by child SpecialJoinInfo in partitionwise join planning |
| Date: | 2023-07-28 08:33:22 |
| Message-ID: | CAMbWs49G1ymH=W9puoUEX5FfXcKGThbgWsx6Hmb3Dp6SJ9uSmg@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Thu, Jul 27, 2023 at 10:10 PM Ashutosh Bapat <
ashutosh(dot)bapat(dot)oss(at)gmail(dot)com> wrote:
> The attached patch (0002) fixes this issue by
> 1. declaring child SpecialJoinInfo as a local variable, thus
> allocating memory on the stack instead of CurrentMemoryContext. The
> memory on the stack is freed automatically.
> 2. Freeing the Relids in SpecialJoinInfo explicitly after
> SpecialJoinInfo has been used.
It doesn't seem too expensive to translate SpecialJoinInfos, so I think
it's OK to construct and free the SpecialJoinInfo for a child join on
the fly. So the approach in 0002 looks reasonable to me. But there is
something that needs to be fixed in 0002.
+ bms_free(child_sjinfo->commute_above_l);
+ bms_free(child_sjinfo->commute_above_r);
+ bms_free(child_sjinfo->commute_below_l);
+ bms_free(child_sjinfo->commute_below_r);
These four members in SpecialJoinInfo only contain outer join relids.
They do not need to be translated. So they would reference the same
memory areas in child_sjinfo as in parent_sjinfo. We should not free
them, otherwise they would become dangling pointers in parent sjinfo.
Thanks
Richard
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Bharath Rupireddy | 2023-07-28 08:41:48 | Re: Support worker_spi to execute the function dynamically. |
| Previous Message | Michael Paquier | 2023-07-28 07:56:26 | Re: Support worker_spi to execute the function dynamically. |