阅 读 文 章

关于DB2的内存分配

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


段 4 (绿色)被分配给数据库共享内存。 
段 2 (橙色)被分配给代理私有内存。 
段 3 (蓝色)被分配给实例共享内存。 
段 B (紫色)被分配给应用程序组共享内存,因为数据库支持 intra_parallel。 
段 A (粉红色)被分配给 FCM,因为 DB2_FORCE_FCM_BP=YES。 
本地连接段被移到段 E(红色)。这是因为 DB2_MMAP_READ 和 DB2_MMAP_WRITE 都被设为 NO。否则,就必须将段 8 用于代理和本地连接通信,因为段 A 和段 B 都已经被占用,而段 9 被预留给 fenced 模式的通信。
观察到的这些情况与 图 6中说明的相匹配。 

设置 32 位 AIX 系统上数据和堆栈的 ulimit

我们早先说过, 图 6中的段 #2 是用于代理私有内存的。实际上,并非完全如此。 

确切地说,段 #2 被预留给数据和堆栈。数据包含用户数据(即代理私有内存)。而堆栈则包含要执行的指令。在这个 256M 的段中,数据是从地址 0x20000000 向下增长的。而堆栈是从地址 0x2FFFFFFF 向上增长的。为了不让数据和堆栈有冲突,设置它们的限制就十分重要。如果数据和堆栈真的有冲突,那么实例就会崩溃,并产生信号 4 或信号 11。

图 8 - 数据段和堆栈段

 


数据和堆栈的限制是在 ulimits(/etc/security/limits)中设置的。使用 SMIT 将它们设置成如下值: 

Data = 491519, Stack = 32767 (512 字节) 

上述值以 512 字节为单位,其中对于数据是 240MB,对于堆栈是 16MB。当使用 "ulimit -a" 显示这两个限制时,显示的值以 1K 字节为单位,而不是以 512 字节为单位。因此这两个值变为: 

Data = 245760, Stack = 16384 

注意: /etc/security/limits 包含了以 512 字节为单位的限制,而不是以 1 KB 为单位的限制。 

32 位 AIX 上与分配数据库共享内存有关的常见问题

初始化数据库共享内存失败可能产生如下问题: 

在数据库启动时(激活数据库或第一次连接数据库) - SQL1478W, SQL0987C, SQL1084C。 
在运行时 - SQL10003N, SQL1042C。
下面的例子展示了会导致问题的不恰当配置。

例 1 考虑以下配置:(所有页的大小为 4KB) 

单分区,禁用集中器,INTRA_PARALLEL OFF,DB2_MMAP_READ=NO,DB2_MMAP_WRITE=NO,无 fenced 函数或过程 
IBMDEFAULTBP 450,000 页 
UTILHEAP 17,500 页 
DBHEAP 10,000 页 
LOCKLIST 1000 页 
PCKCACHE 5000 页 
CATALOGCACHE 2500 页
限制:在此配置中,对于数据库共享内存的限制是 2GB 或 8 个段。

计算:使用公式计算数据库共享内存,我们得到: 

数据库共享内存 = (486,000 页 x 4KB/页的总数) x 1.1 (考虑到 10% 的开销) = ~2.1GB = 9 个段 
论坛热门帖子: [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):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.