Re: Memory consumed by child SpecialJoinInfo in partitionwise join planning
Richard Guo <guofenglinux@gmail.com>
From: Richard Guo <guofenglinux@gmail.com>
To: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2023-07-28T08:33:22Z
Lists: pgsql-hackers
On Thu, Jul 27, 2023 at 10:10 PM Ashutosh Bapat < ashutosh.bapat.oss@gmail.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
Commits
-
Code review for 6190d828cd2
- 0f7863afef67 17.0 landed
-
Do not translate dummy SpecialJoinInfos for child joins
- 6190d828cd25 17.0 landed
-
Reduce memory used by partitionwise joins
- 5278d0a2e870 17.0 landed
-
Remove dummy_spinlock
- 55627ba2d334 17.0 cited