For FCM_NUM_BUFFERS:
FCM buffers are shared by all logical partitions on the server. For each physical server, FCM_NUM_BUFFERS x (# of logical partitions + 2 failover partitions)
(2 failover partitions is by default, controlled with DB2_NUM_FAILOVER_NODES)
For Linux, db2 calculates a value based on the above + 25% for larger configuration. It's rounded up to multiple of 2GB and then we add on an additional 2GB
(not exactly sure if this is only for automatic setting, I think this is for automatic and fixed value but don't quote me here).
You have 3 physical / 17 logical partitions. I assume one partition is on its own server (for coordinator node), leaving 2 servers with 8 logical partitons each.
For each server with 8 logical partitons:
200000 * (8 + 2) = 2000000 4K = ~7.6GB
If 25% plus rounding... is done for non-automatic setting, then:
7.6GB x 1.25 = 9.5GB, round up to 10GB + 2GB = 12GB
For server with 1 logical partition
200000 * (1 + 2) = 600000 4K = ~2.3GB
... = 6GB
db2 will allocate a fixed size segment based on the above (one segment per server). You can see the size of this segment in the ipcs output - this is allocated but not committed in RAM. You can check the segment size using:
- Find the Id value (3rd column) for FCM in db2pd -memsets
- ipcs | grep for that ID value. The bytes column is the segment size
I think db2top is doing double counting for FCM memory (comes from global snapshot?), should only count once per server. Try using db2pd.
Please open a pmr if you require more info.