阅 读 文 章

关于DB2的内存分配

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(nic518) | 时间:2007-05-27 | 浏览:人次 ]



为解决这个问题,可以适当地配置内核参数。设置: 

shmsys:shminfo_shmmax = 15099494 (~90% of 16GB) 

例 2 考虑如下配置: (所有页的大小都为 4K)

服务器上的物理 RAM 是 1 GB。

数据库 A: 

IBMDEFAULTBP 137,500 页 
INTRA_PARALLEL ON 
UTILHEAP 10,000 页 
DBHEAP 10,000 页 
SHEAPTHRES_SHR 20,000 页 
LOCKLIST 1000 页 
PCKCACHE 5000 页 
CATALOGCACHE 2500 页 
APPGROUP_MEM_SZ 20,000 页
数据库 B: 

IBMDEFAULTBP 92,500 页 
INTRA_PARALLEL ON 
UTILHEAP 5,000 页 
DBHEAP 10,000 页 
SHEAPTHRES_SHR 15,000 页 
LOCKLIST 1000 页 
PCKCACHE 5000 页 
CATALOGCACHE 2500 页 
APPGROUP_MEM_SZ 20,000 页
限制: 因为共享内存是固定到物理 RAM 的,所以这种内存不会被换出。因此,我们只能分配最多 1GB (可用的物理 RAM)的共享内存给数据库使用。

计算: 

数据库 A 共享内存 = (186,000 页 x 4KB/页) x 1.1% = ~818MB 
数据库 A 应用程序组内存 = 20,000 页 x 4KB/页 = 80MB 
数据库 B 共享内存 = (131,000 页 x 4KB/页) x 1.1% = ~576MB 
数据库 B 应用程序组内存 = 20,000 页 x 4KB/页 = 80MB
为了启动数据库 A,要求: 818MB + 80MB = ~898MB 
为了启动数据库 B,要求: 576MB + 80MB = ~656MB
问题: 假设数据库 A 是激活的。至少有 898MB 的共享内存固定在物理 RAM 中。当尝试激活数据库 B 时,就会碰到如下错误消息: 

SQL1084C Shared memory segments cannot be allocated. SQLSTATE=57019 

如果同时启动数据库 A 和数据库 B,我们将请求至少 1.55GB (898MB + 656MB) 的可用物理 RAM,以便同样地将共享内存固定在 RAM 中。显然,1GB 的 RAM 不够。为解决这一问题: 

尝试减少这两个数据库的缓冲池大小。或者 
尝试减少应用程序组内存。或者 
更可能的是,增加更多的物理 RAM。在这种情况下,您将需要至少 1.55GB 的物理 RAM,才能同时启动这两个数据库。
在这种情况下,按照上面的数据库配置参数,在任何时刻启动某一个数据库(数据库 A 或数据库 B)是可行的,但是不能同时启动两个数据库。这是必须增加更多的物理 RAM。

这个问题在 AIX 中不会出现,因为在 AIX 中共享内存没有固定在物理 RAM 中。在这种场景中,可以启动数据库 B。但是,这意味着数据库 A 的数据库内存必须调出。当一个应用程序访问数据库 A 时,又得将数据库 B 的数据库内存调出。您可以想象未来要发生的调页次数有多少。
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 分配 内存 关于 数据库 共享 代理 DB2 一个 应用程序

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.