ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13128|回复: 51

[精华] 关于Linux 下kernel.shmmax 的设置问题 。 [复制链接]

版主

高级会员

精华贴数
4
技术积分
20778
社区积分
4568
注册时间
2003-1-23
论坛徽章:
50
会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:兔
日期:2011-01-20 12:58:492011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:保龄球
日期:2011-04-27 09:03:59现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
发表于 2006-5-19 10:05:04 |显示全部楼层
下面是Oracle 文档上的解释, http://download-west.oracle.com/ ... 1/pre.htm#sthref107   


SHMMAX  Available physical memory  Defines the maximum allowable size of one shared memory segment.  

The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory segments which may lead to performance degradation.  


shmmax 的含义是单个共享内存段的最大尺寸, 设置shmmax=1G,sga分配了1.2G,当启动实例的时候就分配 2  块共享内存给Oracle .
如果物理内存是 2 G,   假设这台DB Server上还有Apache 在运行,那么shmmax 中设置的内存也会被Apache 来使用,那么分配的 2 块共享内存段给Oracle 是否就是 2 * 1G ,   还是仅仅满足 SGA需求的 1.2 G就停止分配 , 其他的内存的一部分分配给Oracle PGA 和软件 Apache 来使用 ?

版主

高级会员

精华贴数
4
技术积分
20778
社区积分
4568
注册时间
2003-1-23
论坛徽章:
50
会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:兔
日期:2011-01-20 12:58:492011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:保龄球
日期:2011-04-27 09:03:59现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
发表于 2006-5-19 10:13:48 |显示全部楼层
看Oracle Document 说法 , 当需要分配多个 ( creation of multiple shared memory segments ) 共享内存段的时候会导致性能下降 。
如果偶尔分配需要 2 个共享内存段 ,性能应该不会受到太大影响吧 。

使用道具 举报

版主

高级会员

精华贴数
4
技术积分
20778
社区积分
4568
注册时间
2003-1-23
论坛徽章:
50
会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:兔
日期:2011-01-20 12:58:492011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:保龄球
日期:2011-04-27 09:03:59现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
发表于 2006-5-19 10:56:21 |显示全部楼层
顶下

使用道具 举报

注册会员

我来也!

精华贴数
0
技术积分
2697
社区积分
123
注册时间
2002-10-10
论坛徽章:
9
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2005-11-07 17:06:46铁扇公主
日期:2006-04-12 17:42:13红孩儿
日期:2006-04-13 08:43:44嫦娥
日期:2006-04-13 08:43:54玉兔
日期:2006-04-13 08:44:02九尾狐狸
日期:2006-04-13 08:44:12会员2006贡献徽章
日期:2006-04-17 13:46:34生肖徽章2007版:虎
日期:2009-04-21 21:32:53
发表于 2006-5-19 10:57:39 |显示全部楼层
楼主理解的不对。
oracle 建议 shmmax 大于sga,以让 sga在一个共享内存段中,从而提高性能
shmmax 仅仅表示一个最大值,在实际的生产条件中,如果运行apach等,可能就没有1个内存段达到1G的

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
1198
社区积分
1385
注册时间
2006-4-11
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2006-5-19 11:12:57 |显示全部楼层
到底谁说的对呢?

使用道具 举报

版主

397分

精华贴数
5
技术积分
7415
社区积分
86
注册时间
2002-4-2
论坛徽章:
44
ITPUB元老
日期:2006-02-14 08:33:402011新春纪念徽章
日期:2011-02-18 11:43:33现任管理团队成员
日期:2011-05-07 01:45:08版主4段
日期:2012-05-15 15:24:11
发表于 2006-5-19 11:15:36 |显示全部楼层
最初由 tolywang 发布
[B]看Oracle Document 说法 , 当需要分配多个 ( creation of multiple shared memory segments ) 共享内存段的时候会导致性能下降 。
如果偶尔分配需要 2 个共享内存段 ,性能应该不会受到太大影响吧 。 [/B]


实际过程中很少见到sga分配到多上段的状况。
有些记不清了,我好像记得这个值如果没你要求分配的值低,并不会分配多个共享内存段,实际上会报错(hp-unix)

这个需要实测一下。性能下降一定是一定会的了,分配多段一定会有内存段中data的交互,应该会降一些性能,但不会太大。

使用道具 举报

注册会员

南非蚂蚁

精华贴数
1
技术积分
3355
社区积分
54
注册时间
2005-7-23
论坛徽章:
9
授权会员
日期:2006-03-15 22:32:12数据库板块每日发贴之星
日期:2006-08-15 01:02:49会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
发表于 2006-5-19 11:23:32 |显示全部楼层

Re: 关于Linux 下kernel.shmmax 的设置问题 。

最初由 tolywang 发布
[B]下面是Oracle 文档上的解释, http://download-west.oracle.com/ ... 1/pre.htm#sthref107   


SHMMAX  Available physical memory  Defines the maximum allowable size of one shared memory segment.  

The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory segments which may lead to performance degradation.  


shmmax 的含义是单个共享内存段的最大尺寸, 设置shmmax=1G,sga分配了1.2G,当启动实例的时候就分配 2  块共享内存给Oracle .
如果物理内存是 2 G,   假设这台DB Server上还有Apache 在运行,那么shmmax 中设置的内存也会被Apache 来使用,那么分配的 2 块共享内存段给Oracle 是否就是 2 * 1G ,   还是仅仅满足 SGA需求的 1.2 G就停止分配 , 其他的内存的一部分分配给Oracle PGA 和软件 Apache 来使用 ? [/B]



  应该是满足SGA的1.2G后,分配就停止了,如果有其它应用的话,会重新分配共享内存段给其它应用,

[root@localhost root]# ipcs -sa

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 0          oracle    640        4194304    12                     
0x00000000 32769      oracle    640        33554432   12                     
0x00000000 65538      oracle    640        33554432   12                     
0x00000000 98307      oracle    640        33554432   12                     
0x00000000 131076     oracle    640        33554432   12                     
0x00000000 163845     oracle    640        33554432   12                     
0x00000000 196614     oracle    640        33554432   12                     
0x00000000 229383     oracle    640        33554432   12                     
0x4daf3264 262152     oracle    640        4194304    48                     

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x1af040f0 98304      oracle    640        154      
0x00000000 425985     nobody    600        1         

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   

[root@localhost root]# more /proc/sys/kernel/shmm
shmmax  shmmni  
[root@localhost root]# more /proc/sys/kernel/shmmax
33554432

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
1198
社区积分
1385
注册时间
2006-4-11
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2006-5-22 15:15:31 |显示全部楼层

Re: Re: 关于Linux 下kernel.shmmax 的设置问题 。

最初由 exitgogo 发布
[B]


  应该是满足SGA的1.2G后,分配就停止了,如果有其它应用的话,会重新分配共享内存段给其它应用,

[root@localhost root]# ipcs -sa

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 0          oracle    640        4194304    12                     
0x00000000 32769      oracle    640        33554432   12                     
0x00000000 65538      oracle    640        33554432   12                     
0x00000000 98307      oracle    640        33554432   12                     
0x00000000 131076     oracle    640        33554432   12                     
0x00000000 163845     oracle    640        33554432   12                     
0x00000000 196614     oracle    640        33554432   12                     
0x00000000 229383     oracle    640        33554432   12                     
0x4daf3264 262152     oracle    640        4194304    48                     

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x1af040f0 98304      oracle    640        154      
0x00000000 425985     nobody    600        1         

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   

[root@localhost root]# more /proc/sys/kernel/shmm
shmmax  shmmni  
[root@localhost root]# more /proc/sys/kernel/shmmax
33554432 [/B]


  能否解释一下你的图和你的结论之间的关系

使用道具 举报

注册会员

高级会员

精华贴数
0
技术积分
10615
社区积分
325
注册时间
2001-10-25
论坛徽章:
26
ITPUB元老
日期:2005-02-28 12:57:00生肖徽章:兔
日期:2006-09-26 21:29:55生肖徽章:兔
日期:2006-09-07 17:01:32生肖徽章:兔
日期:2006-09-07 17:02:25生肖徽章:兔
日期:2006-09-07 17:02:46生肖徽章:兔
日期:2006-09-07 17:06:29生肖徽章:兔
日期:2006-09-18 05:26:00生肖徽章:狗
日期:2006-10-06 13:28:27生肖徽章:狗
日期:2006-10-08 05:28:34生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章:兔
日期:2006-09-07 10:21:09生肖徽章:兔
日期:2006-09-07 10:16:46
发表于 2006-5-22 15:35:58 |显示全部楼层
应该是满足SGA的1.2G后,分配就停止了,如果有其它应用的话,会重新分配共享内存段给其它应用,
这个值是单个共享内存段的最大值如果你的SHMMAX 设置为1GB 的话,而且又给oracle 的SGA 分了1.2gb 的话,那么数据库启动的时候SGA 会被分成2个segment,一共1.2GB ,其他的应用应该和oracle 的SGA 又有关系的


如果内存分配给oracle 的SGA 很大的话,最好将这个值设置的比较大一点以便可以使用一个共享内存段就可以放下整个SGA

如果小的话,那么SGA 就被分成好几个shared memory segment ,这样就会在多个内存段上面发生数据的交互,会影响性能的,但是影响不会太大的

这个值还和shmseg有关系。如果值太小而将SGA 分成多个段的话,如果超过shmseg 的话,那也不行

使用道具 举报

超级版主

人生就是如此

精华贴数
39
技术积分
113462
社区积分
12389
注册时间
2001-12-12
论坛徽章:
80
ITPUB元老
日期:2005-02-28 12:57:00蛋疼蛋
日期:2011-05-27 08:50:45蜘蛛蛋
日期:2011-07-01 08:38:17ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2006-5-22 15:45:45 |显示全部楼层
http://www.itpub.net/showthread. ... 229&pagenumber=

参考这个地方,我个人的一点意见
实际上内存段之间的数据的交互的问题 是一个  想象出来的概念,本身虚拟内存地址是否连续 并不影响访问数据的效率,只是在计算地址的时候有点差别,但这个差别几乎不导致性能上的影响。


实际上,shmmax 是否大于sga造成的影响,不过是 sga 在虚拟内存空间上到底是连续的还是离散的问题!

如果 shmmax大于 sga ,则当oracle 启动的时候,连续地分配一段虚拟空间作为一个 share segment 并给sga使用。 但是这些虚拟内存空间 在物理上却并不一定连续,这是os来管理和维护的。


如果sga 分布在多个共享的虚拟空间段上,如上面 YONG HUANG 引述的内容,在启动的时候 需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响。但是在真正地访问 虚拟内存空间(sga)的时候,不过是根据共享段的起始地址来计算偏移量而已。 多个share segment 不过会造成计算访问的内存地址的时候始始地址并不统一,但对数据的访问本身并没有什么差异。 也许在内核中地址的转换有这一部差异,但对应用来讲关系不大。 也许我的描述并不准确,或者说,上面这些话是我个人的理解的一个猜测,但是,我坚信,这本身对数据库性能不会造成多大的影响。

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部