Introduce io_max_combine_limit.
Thomas Munro <tmunro@postgresql.org>
Introduce io_max_combine_limit. The existing io_combine_limit can be changed by users. The new io_max_combine_limit is fixed at server startup time, and functions as a silent clamp on the user setting. That in itself is probably quite useful, but the primary motivation is: aio_init.c allocates shared memory for all asynchronous IOs including some per-block data, and we didn't want to waste memory you'd never used by assuming they could be up to PG_IOV_MAX. This commit already halves the size of 'AioHandleIov' and 'AioHandleData'. A follow-up commit can now expand PG_IOV_MAX without affecting that. Since our GUC system doesn't support dependencies or cross-checks between GUCs, the user-settable one now assigns a "raw" value to io_combine_limit_guc, and the lower of io_combine_limit_guc and io_max_combine_limit is maintained in io_combine_limit. Reviewed-by: Andres Freund <andres@anarazel.de> (earlier version) Discussion: https://postgr.es/m/CA%2BhUKG%2B2T9p-%2BzM6Eeou-RAJjTML6eit1qn26f9twznX59qtCA%40mail.gmail.com
Files
| Path | Change | +/− |
|---|---|---|
| doc/src/sgml/config.sgml | modified | +22 −1 |
| src/backend/commands/variable.c | modified | +18 −0 |
| src/backend/storage/aio/aio_init.c | modified | +6 −11 |
| src/backend/storage/buffer/bufmgr.c | modified | +4 −1 |
| src/backend/utils/misc/guc_tables.c | modified | +15 −1 |
| src/backend/utils/misc/postgresql.conf.sample | modified | +2 −0 |
| src/include/storage/bufmgr.h | modified | +3 −1 |
| src/include/utils/guc_hooks.h | modified | +2 −0 |
Documentation touched
Discussion
- Allow io_combine_limit up to 1MB 15 messages · 2025-02-11 → 2025-04-25