Re: Better shared data structure management and resizable shared data structures
Robert Haas <robertmhaas@gmail.com>
On Thu, Mar 12, 2026 at 2:41 PM Heikki Linnakangas <hlinnaka@iki.fi> wrote: > shmem_startup_hook() is too late. The shmem structs need to be > registered at postmaster startup before the shmem segment is allocated, > so that we can calculate the total size needed. Sorry, I meant shmem_request_hook. > I'm currently leaning towards _PG_init(), except for allocations that > depend on MaxBackends. For those, you can install a shmem_request_hook > that sets the size in the descriptor. In other words, you can leave the > 'size' as empty in _PG_init(), but set it later in the shmem_request_hook. Why can't you just do the whole thing later? > Another option is to add a new bespoken callback in the descriptor for > such size adjustments, which would get called at the same time as > shmem_request_hook. That might be a little more ergonomic, there would > no longer be any need for extensions to use the old > shmem_request/startup_hooks with the new ShmemRegisterStruct() mechanism. Yeah, worth considering. > Except that you'd still need them for RequestNamedLWLockTranche(). I > wonder if we should recommend extensions to embed the LWLock struct into > their shared memory struct and use the LWLockInitialize() and > LWLockNewTrancheId() functions instead. That fits the new > ShmemRegisterStruct() API a little better than RequestNamedLWLockTranche(). Yeah, I think RequestNamedLWLockTranche() might be fine if you just need LWLocks, but if you need a bunch of resources, putting them all into the same chunk of memory seems cleaner. -- Robert Haas EDB: http://www.enterprisedb.com
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Tidy up #ifdef USE_INJECTION_POINTS guards
- 9480c585df6c 19 (unreleased) landed
-
Convert all remaining subsystems to use the new shmem allocation API
- 9b5acad3f40f 19 (unreleased) landed
-
Convert buffer manager to use the new shmem allocation functions
- a4b6139dcceb 19 (unreleased) landed
-
Add alignment option to ShmemRequestStruct()
- dacfe81a0de5 19 (unreleased) landed
-
Convert AIO to use the new shmem allocation functions
- 58a1573385ed 19 (unreleased) landed
-
Convert SLRUs to use the new shmem allocation functions
- 2e0943a8597e 19 (unreleased) landed
-
Refactor shmem initialization code in predicate.c
- 4c9eca5afea0 19 (unreleased) landed
-
Use the new shmem allocation functions in a few core subsystems
- c6d55714ba4c 19 (unreleased) landed
-
Convert lwlock.c to use the new shmem allocation functions
- a006bc7b1699 19 (unreleased) landed
-
Introduce a registry of built-in shmem subsystems
- 1fc2e9fbc0a3 19 (unreleased) landed
-
Convert pg_stat_statements to use the new shmem allocation functions
- d4885af3d653 19 (unreleased) landed
-
Add a test module to test after-startup shmem allocations
- 6409994c7dd8 19 (unreleased) landed
-
Introduce a new mechanism for registering shared memory areas
- 283e823f9dcb 19 (unreleased) landed
-
Move some code from shmem.c and shmem.h
- 6ef9bee29310 19 (unreleased) landed
-
Improve test_lwlock_tranches
- 92a685e4070d 19 (unreleased) landed
-
Test pg_stat_statements across crash restart
- 148fe2b05df5 19 (unreleased) landed
-
Refactor PredicateLockShmemInit to not reuse var for different things
- 3fd057772827 19 (unreleased) landed
-
Refactor ShmemIndex initialization
- 6b8238cb6aa7 19 (unreleased) landed
-
Add a new shmem_request_hook hook.
- 4f2400cb3f10 15.0 cited