Re: memory leak in auto_explain
От | japin |
---|---|
Тема | Re: memory leak in auto_explain |
Дата | |
Msg-id | MEYP282MB166996D3A81483984431075EB6B59@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM обсуждение исходный текст |
Ответ на | Re: memory leak in auto_explain (Jeff Janes <jeff.janes@gmail.com>) |
Ответы |
Re: memory leak in auto_explain
|
Список | pgsql-hackers |
On Tue, 02 Feb 2021 at 07:12, Jeff Janes <jeff.janes@gmail.com> wrote: > On Mon, Feb 1, 2021 at 6:09 PM Jeff Janes <jeff.janes@gmail.com> wrote: > >> >> >> create or replace function gibberish(int) returns text language SQL as $_$ >> select left(string_agg(md5(random()::text),$$$$),$1) from >> generate_series(0,$1/32) $_$; >> >> create table j1 as select x, md5(random()::text) as t11, gibberish(1500) >> as t12 from generate_series(1,20e6) f(x); >> > > I should have added, found it on HEAD, verified it also in 12.5. > Here's my analysis: 1) In the explain_ExecutorEnd(), it will create a ExplainState on SQL function memory context, which is a long-lived, cause the memory grow up. /* * Switch to context in which the fcache lives. This ensures that our * tuplestore etc will have sufficient lifetime. The sub-executor is * responsible for deleting per-tuple information. (XXX in the case of a * long-lived FmgrInfo, this policy represents more memory leakage, but * it's not entirely clear where to keep stuff instead.) */ oldcontext = MemoryContextSwitchTo(fcache->fcontext); 2) I try to call pfree() to release ExplainState memory, however, it does not make sence, I do not know why this does not work? So I try to create it in queryDesc->estate->es_query_cxt memory context like queryDesc->totaltime, and it works. Attached fix the memory leakage in auto_explain. Any thoughts? -- Regrads, Japin Li. ChengDu WenWu Information Technology Co.,Ltd.
Вложения
В списке pgsql-hackers по дате отправления: