Hi all,
I'm getting very confused about how DB2 uses shared memory and I
wonder if someone could clarify matters for me, please ?
We are running 32bit DB2 V7.2 FP9 under AIX 4.3.3 on a machine with 64
Gb of memory with a single non-partitioned database using extended
storage and with intra-parallelism enabled.
I've been experimenting with changing various parameters in an attempt
to make my buffer pool as large as possible but I can't make it bigger
than about 700 Mb and still get the database to activate.
From what I've read in the manuals and on the internet I believe that
DB2 should be able to use a maximum of 7 shared memory segments, which
is about 1.75 Gb of memory, that is used for everything except the
agents private memory (i.e. DBM shared memory + Db global memory +
Application global memory + Agent/application shared memory). Is that
correct ?
Again from what I've read it seems that:
DBM shared memory = Monitor heap(mon_heap_s z) + Audit buffer size
(audit_buf_sz) + Global control block(How big is this ?) + FCM
Connection Entries(fcm_num _connect) + FCM Message Anchors
(fcm_num_anchor s) + FCM Request Block (fcm_num_rqb) + FCM
Buffers(fcm_num _buffers) + FCM Control Block(How big ?) + Something
for the database agents, the manual isn't clear what.
and
Max DB global memory = Buffer Pool size + Locklist(lockli st) +
Database Heap(dbheap) + Utility Heap Size(util_heap_ sz) + Package
Cache(pckcaches z) + Extended memory cache (How big ?)
and
Application global memory = app_ctl_heap_sz
and
Agent/Application shared memory = Application support layer
heap(aslheapsz) + Client I/O block (rqrioblk)
Adding all these things up gives me a total of 940Mb which added to
the Global Control Block, FCM Control Block, Extended memory cache and
something for the agents should give a grand total of 1.75 Gb.
So, should those last four things use about 800 Mb of memory or have I
missed something ?
The manual also states that the database global memory is affected by
the numdb parameter but I've tried changing this from 8 to 1 with no
affect on the total shared memory used.
On a slightly related note, there is a comment in the manual that the
size of the extended storage segments (ESTORE_SEG_SZ) is operating
system dependent but nowhere can I find anything about what a sensible
value for that parameter is. I have found that using 264 segments of
16000 pages each uses more shared memory than 66 segments of 64000
pages each but I don't know why or if it's better to use lots of
little segments rather than a few big ones!
Also, I suspect I'm not using FCM (DB2_FORCE_FCM_ BP is not set), am I
still allocating memory to FCM if the four FCM parameters are set to
non-zero values ?
Cheers,
Jeremy Goodall
I'm getting very confused about how DB2 uses shared memory and I
wonder if someone could clarify matters for me, please ?
We are running 32bit DB2 V7.2 FP9 under AIX 4.3.3 on a machine with 64
Gb of memory with a single non-partitioned database using extended
storage and with intra-parallelism enabled.
I've been experimenting with changing various parameters in an attempt
to make my buffer pool as large as possible but I can't make it bigger
than about 700 Mb and still get the database to activate.
From what I've read in the manuals and on the internet I believe that
DB2 should be able to use a maximum of 7 shared memory segments, which
is about 1.75 Gb of memory, that is used for everything except the
agents private memory (i.e. DBM shared memory + Db global memory +
Application global memory + Agent/application shared memory). Is that
correct ?
Again from what I've read it seems that:
DBM shared memory = Monitor heap(mon_heap_s z) + Audit buffer size
(audit_buf_sz) + Global control block(How big is this ?) + FCM
Connection Entries(fcm_num _connect) + FCM Message Anchors
(fcm_num_anchor s) + FCM Request Block (fcm_num_rqb) + FCM
Buffers(fcm_num _buffers) + FCM Control Block(How big ?) + Something
for the database agents, the manual isn't clear what.
and
Max DB global memory = Buffer Pool size + Locklist(lockli st) +
Database Heap(dbheap) + Utility Heap Size(util_heap_ sz) + Package
Cache(pckcaches z) + Extended memory cache (How big ?)
and
Application global memory = app_ctl_heap_sz
and
Agent/Application shared memory = Application support layer
heap(aslheapsz) + Client I/O block (rqrioblk)
Adding all these things up gives me a total of 940Mb which added to
the Global Control Block, FCM Control Block, Extended memory cache and
something for the agents should give a grand total of 1.75 Gb.
So, should those last four things use about 800 Mb of memory or have I
missed something ?
The manual also states that the database global memory is affected by
the numdb parameter but I've tried changing this from 8 to 1 with no
affect on the total shared memory used.
On a slightly related note, there is a comment in the manual that the
size of the extended storage segments (ESTORE_SEG_SZ) is operating
system dependent but nowhere can I find anything about what a sensible
value for that parameter is. I have found that using 264 segments of
16000 pages each uses more shared memory than 66 segments of 64000
pages each but I don't know why or if it's better to use lots of
little segments rather than a few big ones!
Also, I suspect I'm not using FCM (DB2_FORCE_FCM_ BP is not set), am I
still allocating memory to FCM if the four FCM parameters are set to
non-zero values ?
Cheers,
Jeremy Goodall
Comment