From: | Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com> |
---|---|
To: | andres(at)anarazel(dot)de |
Cc: | reid(dot)thompson(at)crunchydata(dot)com, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Patch to address creation of PgStat* contexts with null parent context |
Date: | 2022-08-08 06:12:08 |
Message-ID: | 20220808.151208.750738009315453133.horikyota.ntt@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
At Sat, 6 Aug 2022 19:19:39 -0700, Andres Freund <andres(at)anarazel(dot)de> wrote in
> Hi,
>
> On 2022-08-05 17:22:38 +0900, Kyotaro Horiguchi wrote:
> > I think it a bit different. Previously that memory (but for a bit
> > different use, precisely) was required only when stats data is read so
> > almost all server processes didn't need it. Now, every server process
> > that uses pgstats requires the two memory if it is going to write
> > stats. Even if that didn't happen until process termination, that
> > memory eventually required to flush possibly remaining data. That
> > final write might be avoidable but I'm not sure it's worth the
> > trouble. As the result, calling pgstat_initialize() is effectively
> > the declaration that the process requires the memory.
>
> I don't think every process will end up calling pgstat_setup_memcxt() -
> e.g. walsender, bgwriter, checkpointer probably don't? What do we gain by
> creating the contexts eagerly?
Yes. they acutally does, in shmem_shutdown hook function, during
at-termination stats write. I didn't consider to make that not
happen, to save 2kB of memory on such small number of processes.
> > Thus I thought that we may let pgstat_initialize() promptly allocate
> > the memory.
>
> That makes some sense - but pgstat_attach_shmem() seems like a very strange
> place for the call to CreateCacheMemoryContext().
Sure. (I hesitantly added #include for catcache.h..)
> I wonder if we shouldn't just use TopMemoryContext as the parent for most of
> these contexts instead. CacheMemoryContext isn't actually a particularly good
> fit anymore.
It looks better than creating CacheMemoryContext. Now
pgstat_initialize() creates the memory contexts for pgstats use under
TopMemoryContext.
And we don't hastle to avoid maybe-empty at-process-termination
writes..
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center
Attachment | Content-Type | Size |
---|---|---|
pgstat_create_memcxt_at_init_2.txt | text/plain | 2.1 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2022-08-08 06:15:46 | Re: logical decoding and replication of sequences |
Previous Message | Dilip Kumar | 2022-08-08 06:11:24 | Re: Perform streaming logical transactions by background workers and parallel apply |