- 论坛徽章:
- 0
|
developer Works上有一篇《DB2 UDB 内存模型》的文章,对DB2内存的使用讲的很清楚――“DB2 在 4 种不同的内存集(memory set)内拆分和管理内存。这 4 种内存集分别是:
实例共享内存(instance shared memory)
数据库共享内存(database shared memory)
应用程序组共享内存(application group shared memory)
代理私有内存(agent private memory)”
最近看了有关DB2内存管理更详细资料,写出笔记和大家分享,如果有理解不对的地方希望不吝赐教。
DB2用DB2 Memory Manager组件来管理内存分配。内存管理中有3个概念
1. Memory Block
Memory Block是一片连续的内存空间,是内存分配的基本单位。
2. Memory Pool
Memory Pool是DB2 Memory Manager分配给不同组件的一组内存。DB2根据内存使用的范围、用途、行为来组织分配,所以有了Memory Pool的概念。有些Memory Pool只为一个用途服务,比如package cache;而有些Memory Pool会为多个用途服务,比如database heap, application heap。
一个Memory Pool可以包含多个Memory Block,一个Memory Block只能属于一个Memory Pool。
3. Memory Set
Memory Set是从操作系统的角度来对内存分配进行管理。
Share Memory Set在UNIX上会对应到1个或多个IPC共享内存段。
Private Memory Set由多个private memory allocations组成。
一个Memory Set可以包含多个Memory Pool,一个Memory Pool只能属于一个Memory Set。
对于每台机器,每个实例会有2个Memory Set:
FCM (Fast Communication Manager)
TRACE
对于每个实例,每个分区会有3个Memory Set:
DBM (Database Manager)
FMP (Fenced Mode Processing);
HMON (Health Monitor).
在我的机器上用”db2pd -memsets”可以看到
Memory Sets:
Name Address Id Size(Kb)
DBMS 0x03820000 1879048192 38592
FMP 0x22000000 1879048191 81920
Trace 0x00000000 0 64
“db2pd -db sample -memsets”列出数据库和应用的Memory Sets
Memory Sets:
Name Address Id Size(Kb
SAMPLE 0x053D0000 0 234688
App10 0x00000000 0 0
App9 0x00000000 0 0
用“db2pd -mempools”命令可以看到每个Memory Set中包含的Memory Pools
Memory Pools:
Address MemSet PoolName Id
0x038208BC DBMS monh 11
0x0382080C DBMS resynch 62
0x0382075C DBMS apmh 70
0x038206AC DBMS kerh 52
0x038205FC DBMS bsuh 71
0x0382054C DBMS sqlch 50
0x0382049C DBMS djh 83
0x038203EC DBMS pmth 80
0x0382033C DBMS krcbh 69
0x220001DC FMP undefh 59
类似的”db2pd -db sample -mempools”会列出数据库的Memory Pools。而这些Memory Pools就有《DB2 UDB 内存模型》提到的Utility Heap, Package Cache, Catalog Cache, XML Cache(DB2 V9.1)和主缓冲池等。当然db2mtrk和snapshot也可以查看Memory Pools的信息。
Memory Pools:
Address MemSet PoolName Id
0x053B0ACC SAMPLE utilh 5
0x053B096C SAMPLE pckcacheh 7
0x053B08BC SAMPLE xmlcacheh 93
0x053B080C SAMPLE catcacheh 8
0x053B075C SAMPLE bph 16
0x053B06AC SAMPLE bph 16
0x053B05FC SAMPLE bph 16
0x053B054C SAMPLE bph 16
0x053B049C SAMPLE bph 16
0x053B03EC SAMPLE bph 16
0x053B033C SAMPLE shsorth 18
0x053B028C SAMPLE lockh 4
0x053B01DC SAMPLE dbh 2
通过“db2pd -memblocks”和”db2pd -db sample -memblocks”命令会发现每一个Memory Pools都是由若干个Memory Block组成的。
存在的疑问是Memory Block的信息好像不能用snapshot查看,那就只能用db2pd了,那么监控Memory Block对系统调优有什么帮助呢? |
|