Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

65

积分

0

好友

31

主题
1#
发表于 2012-5-6 10:48:03 | 查看: 11081| 回复: 5
问题来自 http://blog.csdn.net/tianlesoftware/article/details/4668741

引用关键部分


kernel.shmmax 参数
2.1 说明

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 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降


SHMMAX 仅仅是在共享内存段被创建的时候用来比较的一个数字,当共享内存段被一个进程(Process)创建,操作系统检查是否被要求的共享内存段的值大于shmmax 的值 ,如果是,那么将会抛出一个错误。这个时候系统会创建另外的一个或多个共享内存段满足进程的需求 。一般来说,共享内存段个数和系统性能没有太直接的关系,也不会对性能产生太大的影响。



在实例启动以及Server Process 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候 需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及Destroy Them,性能方面就不是考虑的问题。



Oralce 建议 SHMMAX > SGA(SGA_MAX_SIZE),这样在任何时候都不会有甚至轻微的性能下降的隐患。




我的问题有几个
1)为何一定要“shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA”,按照文章说法,原因是
   “设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降”。我不大理解这个原因?
     创建多个共享内存段,就创建多个呗?为何创建多个,就可能导致系统性能下降?
     网上查了一些资料,感觉这是个经验设置。
2)假设我现在Linux系统上只安装Oracle,我的疑问是配置SHMMAX 这个参数的时候,只用考虑SGA吗?
   我的意思,操作系统本身也有使用共享内存段的需求吧?
3)一个共享内存段是只能给一个进程使用,还是可以给多个进程使用呢?
  如果一个共享内存段只能给一个进程使用,那么假设有3个进程需要共享内存段
  假设一个共享内存段设置成4G(稍微大于SGA的设置),但其他两个进程需要的共享内存段仅为0.5G,
  那么不等于浪费了7G(3.5+3.5)的内存?
4)假设一个共享内存段设置成4G,但系统的使用共享内存段需求是4.5G,那么就必须需要两个共享内存段(即8G),
  那么不等于浪费了3.5的内存?

2#
发表于 2012-5-7 11:02:20
菜菜的回答一下
1、网络了搜了几篇文章
http://www.itpub.net/forum.php?mod=viewthread&tid=551229
   http://space.itpub.net/17203031/viewspace-707900
  http://wanshuiqianshan.iteye.com/blog/1187655
   个人从上面的文章理解:
    1.1共享内存分配方式有三种 : 单段(one-segment)、连续多段(contiguous multi-segment)和非连续多段(non-contiguous multi-segment)
     1.2 :根据 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.

2.根据 Oracle 的安装文档,你的主机只安装oracle 的话,就应当只考虑SGA的大小 。

3.一个共享内存段是只能给一个进程使用,还是可以给多个进程使用呢?
   当然是给多个进程一起使用。顾名思义:共享段嘛。多个进程 返问shared pool ,buffer pool等 。

4.那么不等于浪费了3.5的内存?
应该 是没有浪费3.5G,应该是你的程序需要多大的共享段,他就分配多的大的共享段
  按你上面的情况,应该 是分配一个4G的共享段,然后再分配一个0.5G的共享段……
  应该 可以用通过ipcs来计算出来,但是我没有计算过

回复 只看该作者 道具 举报

3#
发表于 2012-6-12 00:53:57
自我标记一下

根据 Oracle Database on Unix AIX,HP-UX,Linux,Mac OS X,Solaris,Tru64 Unix Operating Systems Installation and Configuration Requirements Quick Reference (8.0.5 to 11.2) [ID 169706.1]

中  kernel.shmmax = RAM times 0.5 (or higher at customer's discretion - see Note:567506.1)

给出了shmmax的参考值 

回复 只看该作者 道具 举报

4#
发表于 2012-6-12 11:06:21
请直接使用 oracle-validated kernel.shmmax

# Oracle-Validated setting for kernel.shmmax is 4398046511104 on x86_64 and 4294967295 on i386 architecture. Refer Note id 567506.1
kernel.shmmax = 4398046511104

在 x86_64 上是 4398046511104
在  i386 上是   4294967295

虽然你实际没有这么多内存 ,但是不会有任何问题

回复 只看该作者 道具 举报

5#
发表于 2012-6-12 22:31:28

回复 4# 的帖子

HI 刘大:

  可是通过567506.1这篇方档,我认为在64位Linux下,shmmax没有必要设置那么大.

因为:文档里说
The maximum size of a shared memory segment is limited by the size of the available user address space. On 64-bit systems, this is a theoretical 2^64bytes. So the "theoretical limit" for SHMMAX is the amount of physical RAM that you have.  However, to actually attempt to use such a value could potentially lead to a situation where no system memory is available for anything else. Therefore a more realistic "physical limit" for SHMMAX would probably be "physical RAM - 2Gb".

Therefore, the common "Oracle maximum" for SHMMAX that you will often see is "1/2 of physical RAM". Many Oracle customers chose a higher fraction, at their discretion.

Occasionally, Customers may erroneously think that that setting the SHMMAX as recommended in this NOTE limits the total SGA.   That is not true.

回复 只看该作者 道具 举报

6#
发表于 2012-6-12 23:22:21
实际POC测试和生产实践 这个参数 kernel.shmmax设得大不会有不良的影响,除非你的系统中还有其他非oracle程序会分配大的共享内存段,否则直接使用oracle-validated的推荐值即可。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 22:31 , Processed in 0.050184 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569