solaris10中安装oracle内核参数的调整【转】

http://www.itpub.net/thread-596038-1-1.html

 

solaris10中可以使用资源控制器进行部分内核参数的动态调整了,比如在以前版本中安装oracle需要修改/etc/system,添加类似下边的内容:

  • set noexec_user_stack=1
  • set shmsys:shminfo_shmmax=4294967295
  • set shmsys:shminfo_shmmin=1
  • set shmsys:shminfo_shmmni=100
  • set shmsys:shminfo_shmseg=10
  • set semsys:seminfo_semmni=100
  • set semsys:seminfo_semmsl=1000
  • set semsys:seminfo_semmns=2000
  • set semsys:seminfo_semopm=100
  • set semsys:seminfo_semvmx=32767

 

在这些参数中:

  • semsys:seminfo_semmns
  • shmsys:shminfo_shmmin   
  • semsys:seminfo_semvmx

在solaris10中已经移除,

即使在system中有这些参数的设置solaris10也会自动注释掉,

所以大家不用再去算什么semsys:seminfo_semmns了,呵呵

 

剩下的大家比较关注的有几个:
Parameter        Replaced by Resource Control        Recommended Value
noexec_user_stack        NA        1
semsys:seminfo_semmni        project.max-sem-ids        100
semsys:seminfo_semmsl        process.max-sem-nsems        256
shmsys:shminfo_shmmax        project.max-shm-memory        4294967295
shmsys:shminfo_shmmni        project.max-shm-ids        100


这是oracle安装文档里面列出的内容,

这里面和共享内存有关系的是:

  • shmsys:shminfo_shmmax  共享内存段(shared memory segment)最大大小
  • semsys:seminfo_semmni   同一时间可以创建的信号组(semaphore sets)最大值
  • shmsys:shminfo_shmmni  共享内存标志符(shared memory identifiers)的数量

和进程数量有关的是:

  • semsys:seminfo_semmsl 一个信号组中包含的最大信号数量,约等于oracle的最大进程数

  oracle文档里把shmsys:shminfo_shmmax和project.max-shm-memory列在一起,并且还加了一个推荐值,

这样很容易让人误解这两个参数是等同的,其实这个两个参数含义相差很大,而数值更是差了十万八千里。

shmsys:shminfo_shmmax是一个共享内存段的最大值,而project.max-shm-memory是属于同一个project的用户所能够创建的共享内存总和最大值,

在数值上:
project.max-shm-memory = shmsys:shminfo_shmmax × shmsys:shminfo_shmmni

 

所以如果在system文件中设置了shmsys:shminfo_shmmax和shmsys:shminfo_shmmni,

然后在重启系统之后查看project.max-shm-memory的话会发现这是一个很大的值。

再看看project.max-shm-memory对系统的影响,在我们创建oracle用户时默认的project为default,

如果project.max-shm-memory为4G的话,在不考虑其他用户使用共享内存的情况下,则oracle用户下所有数据库的SGA和不能超过4G,

如果只有一个数据库,则这个数据库的SGA不能大过4G(比4G略小),如果有两个则这两个数据库的SGA的总和不能大过4G。
然后再看看共享内存段是怎么分配的,在以前的版本里共享内存段的大小由shmsys:shminfo_shmmax决定的,构成SGA的共享内存段大小不会超过这个限制,

如果超过则SGA由多个共享内存段组成,但是在10G里似乎这个参数并不起作用。
举个例子,在system中设置shmsys:shminfo_shmmax为100m
set shmsys:shminfo_shmmax=104857600
数据库的SGA设置为500m
alter system set sga_target=500m scope=spfile;
启动数据库后使用ipcs –b查看
IPC status from <running system> as of 2006年07月21日 星期五 12时52分23秒 CST
T         ID      KEY        MODE        OWNER    GROUP QBYTES
Message Queues:
T         ID      KEY        MODE        OWNER    GROUP      SEGSZ
Shared Memory:
m          3   0xe6ea3758 --rw-r-----   oracle      dba  524296192
T         ID      KEY        MODE        OWNER    GROUP NSEMS
Semaphores:
s          7   0x6c609d48 --ra-r-----   oracle      dba   304
还是只是用了一个内存段,并没有受set shmsys:shminfo_shmmax=104857600的影响
但是一个内存段的大小似乎也不是不受限制的,在另外一台SGA为32G的机器上用ipcs查看,SGA是由几个接近8G的内存段组成的,

而这台机器上的shmsys:shminfo_shmmax设置为40G,可是系统并没有把SGA放入到一个内存段中,可见共享内存段的大小还是受限制的,

在这个系统上大约为8G,至于是否可以调整,还没有看到相关资料,怀疑是受每个物理cpu板上具体内存大小的限制,哪位大侠有这方面的资料

 

下面是sun提供的新旧参数对照,尤其需要注意的是如果在system参数中设置了比默认值还小的值,在实际中是不起作用的,相应的值依然是最小值
Resource Control         Obsolete Tunable         Old Default Value         Maximum Value         New Default Value
process.max-msg-qbytes         msginfo_msgmnb         4096         ULONG_MAX         65536
process.max-msg-messages         msginfo_msgtql         40         UINT_MAX         8192
process.max-sem-ops         seminfo_semopm         10         INT_MAX         512
process.max-sem-nsems         seminfo_semmsl         25         SHRT_MAX         512
project.max-shm-memory         shminfo_shmmax         0x800000         UINT64_MAX         1/4 of physical memory
project.max-shm-ids         shminfo_shmmni         100         224         128
project.max-msg-ids         msginfo_msgmni         50         224         128
project.max-sem-ids         seminfo_semmni         10         224         128


综合上面的一些信息我们发现,shminfo_shmmax这个参数起的作用已经很有限了,

需要注意的就是shmsys:shminfo_shmmax×shmsys:shminfo_shmmni的大小决定了默认情况下project.max-shm-memory的大小,

另外seminfo_semmsl参数在大于新默认值的时候决定了process.max-sem-nsems的大小,而这些都是可以动态调整的:
使用prctl
使用id –p查看用户所属的project名称,然后

  • prctl -n project.max-shm-memory -v 10G -r -i project default
  • prctl -n project.max-sem-ids -v 256 -r -i project default
  • prctl -n project.max-shm-ids -v 256 -r -i project default

这样所作的修改系统重启后就失效了
可以使用下面的方法为oracle用户创建单独的project,然后修改相应的值

  • projadd -U oracle user.oracle
  • projmod -a-K "project.max-shm-memory=(priv,10g,deny)" user.oracle
  • projmod -a-K "project.max-sem-ids=(priv,100,deny)" user.oracle
  • projmod -a-K "process.max-sem-nsems=(priv,500,deny)" user.oracle
  • projmod -a-K "project.max-shm-ids=(priv,100,deny)" user.oracle

修改之后只要切换到oracle用户设置就生效了,重启之后也不会丢失

更加详细的关于project的操作请查看solaris相应的手册,以后修改/etc/system的方法应该会被这种方式逐步取代

 

 

posted on 2010-06-05 00:01  zcc  阅读(1886)  评论(0)    收藏  举报

导航