免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6060 | 回复: 2
打印 上一主题 下一主题

DB2的内存管理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-17 21:59 |只看该作者 |倒序浏览
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对系统调优有什么帮助呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-04-18 10:07 |只看该作者
长知识!

你的问题,用过V9才可能知道。所以,我也是来问问题的。

db2pd -db sample -mempools的结果里为什么看不到App10、App9呢?

论坛徽章:
0
3 [报告]
发表于 2007-04-18 15:14 |只看该作者
App10、App9是我自己的application 的agent private memory吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP