Permit super-MaxAllocSize allocations with MemoryContextAllocHuge().
Noah Misch <noah@leadboat.com>
Permit super-MaxAllocSize allocations with MemoryContextAllocHuge(). The MaxAllocSize guard is convenient for most callers, because it reduces the need for careful attention to overflow, data type selection, and the SET_VARSIZE() limit. A handful of callers are happy to navigate those hazards in exchange for the ability to allocate a larger chunk. Introduce MemoryContextAllocHuge() and repalloc_huge(). Use this in tuplesort.c and tuplestore.c, enabling internal sorts of up to INT_MAX tuples, a factor-of-48 increase. In particular, B-tree index builds can now benefit from much-larger maintenance_work_mem settings. Reviewed by Stephen Frost, Simon Riggs and Jeff Janes.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/utils/mmgr/aset.c | modified | +5 −0 |
| src/backend/utils/mmgr/mcxt.c | modified | +66 −8 |
| src/backend/utils/sort/tuplesort.c | modified | +49 −42 |
| src/backend/utils/sort/tuplestore.c | modified | +42 −35 |
| src/include/utils/memutils.h | modified | +16 −12 |
| src/include/utils/palloc.h | modified | +4 −0 |
| src/include/utils/tuplesort.h | modified | +1 −1 |