Allocate local buffers in a context of their own, rather than dumping them
into TopMemoryContext. This makes no functional difference, but makes it easier to see what the space is being used for in MemoryContextStats dumps. Per a recent example in which I was surprised by the size of TopMemoryContext.
This commit is contained in:
parent
e275d16a54
commit
bc7cb8f42c
@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.90 2010/08/13 20:10:52 rhaas Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.91 2010/08/19 16:16:20 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -399,6 +399,7 @@ GetLocalBufferStorage(void)
|
||||
static int next_buf_in_block = 0;
|
||||
static int num_bufs_in_block = 0;
|
||||
static int total_bufs_allocated = 0;
|
||||
static MemoryContext LocalBufferContext = NULL;
|
||||
|
||||
char *this_buf;
|
||||
|
||||
@ -409,6 +410,19 @@ GetLocalBufferStorage(void)
|
||||
/* Need to make a new request to memmgr */
|
||||
int num_bufs;
|
||||
|
||||
/*
|
||||
* We allocate local buffers in a context of their own, so that the
|
||||
* space eaten for them is easily recognizable in MemoryContextStats
|
||||
* output. Create the context on first use.
|
||||
*/
|
||||
if (LocalBufferContext == NULL)
|
||||
LocalBufferContext =
|
||||
AllocSetContextCreate(TopMemoryContext,
|
||||
"LocalBufferContext",
|
||||
ALLOCSET_DEFAULT_MINSIZE,
|
||||
ALLOCSET_DEFAULT_INITSIZE,
|
||||
ALLOCSET_DEFAULT_MAXSIZE);
|
||||
|
||||
/* Start with a 16-buffer request; subsequent ones double each time */
|
||||
num_bufs = Max(num_bufs_in_block * 2, 16);
|
||||
/* But not more than what we need for all remaining local bufs */
|
||||
@ -416,8 +430,7 @@ GetLocalBufferStorage(void)
|
||||
/* And don't overflow MaxAllocSize, either */
|
||||
num_bufs = Min(num_bufs, MaxAllocSize / BLCKSZ);
|
||||
|
||||
/* Allocate space from TopMemoryContext so it never goes away */
|
||||
cur_block = (char *) MemoryContextAlloc(TopMemoryContext,
|
||||
cur_block = (char *) MemoryContextAlloc(LocalBufferContext,
|
||||
num_bufs * BLCKSZ);
|
||||
next_buf_in_block = 0;
|
||||
num_bufs_in_block = num_bufs;
|
||||
|
Loading…
x
Reference in New Issue
Block a user