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? > 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(). 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. Greetings, Andres Freund