Amit-san, On Wed, Mar 6, 2019 at 5:38 AM, Amit Langote wrote: ... > > I didn't investigate that problem, but there is another memory > > increase > issue, which is because of 0003 patch I think. I'll try to solve the latter > issue. > > Interested in details as it seems to be a separate problem.
I solved this problem. I think we don't need to do list_copy in the below code. + /* + * No need to copy of the RTEs themselves, but do copy the List + * structure. + */ + subroot->parse->rtable = list_copy(rtable_with_target); Because subroot->parse->rtable will be copied again by: subroot->parse = (Query *) adjust_appendrel_attrs(parent_root, - (Node *) parent_parse, + (Node *) subroot->parse, 1, &appinfo); So I modified the code and did test to confirm memory increasement don't happen. The test and results are below. [test] * Create partitioned table with 1536 partitions. * Execute "update rt set a = random();" [results] A backend uses below amount of memory in update transaction: HEAD: 807MB With v26-0001, 0002: 790MB With v26-0001, 0002, 0003: 860MB With v26-0003 modified: 790MB I attached the diff of modification for v26-0003 patch which also contains some refactoring. Please see if it is ok. (Sorry it is modification for v26 patch though latest ones are v28.) -- Yoshikazu Imai
v26-0003-solving-memory-increasement-problem.diff
Description: v26-0003-solving-memory-increasement-problem.diff