ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6270|回复: 16

[笔记] 关于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:25:09 |显示全部楼层
关于Linux 下kernel.shmmax 的设置问题 。
下面是Oracle 文档上的解释, http://download-west.oracle.com/doc...e.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 来使用 ?



看Oracle Document 说法 , 当需要分配多个 ( creation of multiple shared memory segments ) 共享内存段的时候会导致性能下降 。
如果偶尔分配需要 2 个共享内存段 ,性能应该不会受到太大影响吧 。

超级版主

人生就是如此

精华贴数
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-19 12:44:04 |显示全部楼层
ipcs 看看就知道个数和大小了

至于共享内存段个数的问题,和性能应该没有太明显的关系。

使用道具 举报

精华贴数
5
技术积分
36801
社区积分
5268
注册时间
2005-3-4
论坛徽章:
120
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51铁扇公主
日期:2012-02-21 15:02:402012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09迷宫蛋
日期:2012-04-20 16:36:56数据库板块每日发贴之星
日期:2011-08-30 01:01:02灰彻蛋
日期:2011-08-24 18:27:42
发表于 2006-5-19 15:54:53 |显示全部楼层
好象共享内存段数与性能没有直接的影响,我以前实验过。

使用道具 举报

版主

Love oracle

精华贴数
0
技术积分
16668
社区积分
13919
注册时间
2004-8-13
论坛徽章:
113
尤文图斯
日期:2009-08-17 14:13:292012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:54现任管理团队成员
日期:2011-05-07 01:45:08ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52版主2段
日期:2012-05-15 15:24:11
发表于 2006-5-19 23:50:34 |显示全部楼层

Re: 关于Linux 下kernel.shmmax 。

最初由 tolywang 发布
[B]


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 来使用 ?
看Oracle Document 说法 , 当需要分配多个 ( creation of multiple shared memory segments ) 共享内存段的时候会导致性能下降 。
如果偶尔分配需要 2 个共享内存段 ,性能应该不会受到太大影响吧 。 [/B]



我觉得如果单个shmmax小于sga的设置的话,在系统高峰期下还是存在性能影响比较大的.不知道各位意见如何.

使用道具 举报

版主

版主

精华贴数
3
技术积分
9951
社区积分
199
注册时间
2001-10-9
论坛徽章:
29
ITPUB元老
日期:2005-02-28 12:57:002011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:33ITPUB年度最佳技术回答奖
日期:2011-04-08 18:37:39现任管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期: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:20
发表于 2006-5-20 12:16:53 |显示全部楼层

Re: 关于Linux 下kernel.shmmax 。

最初由 tolywang 发布
[B]
如果物理内存是 2 G, 假设这台DB Server上还有Apache 在运行,那么shmmax 中设置的内存也会被Apache 来使用,那么分配的 2 块共享内存段给Oracle 是否就是 2 * 1G , 还是仅仅满足 SGA需求的 1.2 G就停止分配 , 其他的内存的一部分分配给Oracle PGA 和软件 Apache 来使用 ?
[/B]


shmmax is just a number only used in comparison when the shared memory segment is created. When the segment is created by a process, OS checks to see if the requested segment size is larger than shmmax. If yes, it throws an error. [see example code at end for a test] Oracle must be doing something more intelligent, such as trying to create the segment again by splitting the requested size into two chunks.

"shmmax 中设置的内存也会被Apache 来使用" is conceptually wrong. Each process has its own shared memory segment (if it creates it). Unless process A attaches to B's existing segment, process A simply won't have shared memory.

I remember Oracle's installation guide for 32-bit Solaris recommends setting shmmax to the 32-bit number limit, i.e. 4GB. Back then, 4GB RAM Solaris machines were not popular and the recommendation worked fine.

[example for a quick test]
#!/usr/bin/perl -w
use IPC::SysV qw(IPC_PRIVATE IPC_RMID S_IRWXU);
$size = 33554433;
$id = shmget(IPC_PRIVATE, $size, S_IRWXU) || die "$!";
shmctl($id, IPC_RMID, 0) || die "$!";

My /proc/sys/kernel/shmmax says 33554432. This is RH Linux.

Yong Huang

使用道具 举报

版主

版主

精华贴数
3
技术积分
9951
社区积分
199
注册时间
2001-10-9
论坛徽章:
29
ITPUB元老
日期:2005-02-28 12:57:002011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:33ITPUB年度最佳技术回答奖
日期:2011-04-08 18:37:39现任管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期: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:20
发表于 2006-5-20 12:20:51 |显示全部楼层

Re: Re: 关于Linux 下kernel.shmmax 。

最初由 cc59 发布
[B]
我觉得如果单个shmmax小于sga的设置的话,在系统高峰期下还是存在性能影响比较大的.不知道各位意见如何. [/B]


Steve Adams in his booklet said having multiple small shared memory segments causes slight performance degradation on instance startup and server process creation. This means that if your application doesn't constantly create processes (and destroy them), performance is not a concern.

Speaking of fragmenting Oracle's shared memory segment, I found that Solaris allows you to create a larger than 1.7GB SGA on 32-bit OS without relocating sgabeg. See
http://rootshell.be/~yong321/computer/sgabegbug.txt

Yong Huang

使用道具 举报

超级版主

人生就是如此

精华贴数
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-20 14:35:31 |显示全部楼层

Re: Re: 关于Linux 下kernel.shmmax 。

最初由 cc59 发布
[B]


我觉得如果单个shmmax小于sga的设置的话,在系统高峰期下还是存在性能影响比较大的.不知道各位意见如何. [/B]


1: 你这不过是觉得
2:你没有测试过
3:甚至你也无法从理论上来阐述这个问题


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

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


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

使用道具 举报

版主

Love oracle

精华贴数
0
技术积分
16668
社区积分
13919
注册时间
2004-8-13
论坛徽章:
113
尤文图斯
日期:2009-08-17 14:13:292012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:54现任管理团队成员
日期:2011-05-07 01:45:08ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52版主2段
日期:2012-05-15 15:24:11
发表于 2006-5-21 04:27:15 |显示全部楼层

Re: Re: Re: 关于Linux 下kernel.shmmax 。

最初由 biti_rainy 发布
[B]

1: 你这不过是觉得
2:你没有测试过
3:甚至你也无法从理论上来阐述这个问题


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

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


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


多谢

我再看看相关的知识!

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
1140
社区积分
73
注册时间
2006-2-3
论坛徽章:
0
发表于 2006-5-22 16:34:01 |显示全部楼层

使用道具 举报

注册会员

来自重庆 望舒冰舞 9i OCP 10g OCM

精华贴数
0
技术积分
8197
社区积分
147
注册时间
2006-8-15
论坛徽章:
25
2010广州亚运会纪念徽章:赛艇
日期:2011-02-14 17:18:30迷宫蛋
日期:2012-02-13 11:32:08双黄蛋
日期:2011-12-22 13:59:23ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26咸鸭蛋
日期:2011-11-23 13:56:44最佳人气徽章
日期:2012-03-13 17:39:18鲜花蛋
日期:2011-08-29 14:12:16紫蛋头
日期:2011-07-15 16:09:53数据库板块每日发贴之星
日期:2011-06-23 01:01:01ITPUB季度 技术新星
日期:2011-04-02 10:31:092010广州亚运会纪念徽章:帆船
日期:2011-03-31 16:45:04数据库板块每日发贴之星
日期:2011-03-19 01:01:01
发表于 2009-11-5 10:23:57 |显示全部楼层
D
QQ:22389860  MSN:gaopengtttt@hotmail.com
5年dba 在重庆
http://space.itpub.net/?7728585
英语啊,我的哥

使用道具 举报

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

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