Re: Changing shared_buffers without restart
Dmitry Dolgov <9erthalion6@gmail.com>
From: Dmitry Dolgov <9erthalion6@gmail.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: pgsql-hackers@postgresql.org
Date: 2024-11-27T20:48:14Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Remove PG_MMAP_FLAGS from mem.h
- c100340729b6 19 (unreleased) landed
-
Improve runtime and output of tests for replication slots checkpointing.
- 4464fddf7b50 18.0 cited
-
Revert support for improved tracking of nested queries
- f85f6ab051b7 18.0 cited
-
Use exported symbols list on macOS for loadable modules as well
- 3feff3916ee1 18.0 cited
-
Add support for basic NUMA awareness
- 65c298f61fc7 18.0 cited
-
Avoid unnecessary copying of a string in pg_restore.c
- 5e1915439085 18.0 cited
-
aio: Infrastructure for io_method=worker
- 55b454d0e140 18.0 cited
-
Improve InitShmemAccess() prototype
- 2a7b2d97171d 18.0 landed
> On Wed, Nov 27, 2024 at 10:20:27AM GMT, Robert Haas wrote: > > > > > > code, but I'm not sure exactly which points are safe. If we have no > > > code anywhere that assumes the address of an unpinned buffer can't > > > change before we pin it, then I guess the check for pins is the only > > > thing we need, but I don't know that to be the case. > > > > Probably I'm missing something here. What scenario do you have in mind, > > when the address of a buffer is changing? > > I was assuming that if you expand the mapping for shared_buffers, you > can't count on the new mapping being at the same address as the old > mapping. If you can, that makes things simpler, but what if the OS has > mapped something else just afterward, in the address space that you're > hoping to use when you expand the mapping? Yes, that's the whole point of the exercise with remap -- to keep addresses unchanged, making buffer management simpler and allowing resize mappings quicker. The trade off is that we would need to take care of shared mapping placing. My understanding is that clashing of mappings (either at creation time or when resizing) could happen only withing the process address space, and the assumption is that by the time we prepare the mapping layout all the rest of mappings for the process are already done. But I agree, it's an interesting question -- I'm going to investigate if those assumptions could be wrong under certain conditions. Currently if something else is mapped at the same address where we want to expand the mapping, we will get an error and can decide how to proceed (e.g. if it happens at creation time, proceed with a single mapping, otherwise ignore mapping resize).