solaris内存参数调整及管理

来源:这里教程网 时间:2026-03-03 12:14:21 作者:

一、solaris 内存参数说明

shared memory:共享内存段:  一个内存区域,可以被不同的进程读取。Oracle使用它来构成SGA。Oracle使用以下三种方法来创建一个SGA区:  1. 使用单个共享内存段。  2. 使用连续多个共享内存段。  3. 使用多个不连续共享内存段。  Oracle优先使用第一种方法,如果成功,则继续初始化,不成功则使用第二种方法,再不成功则使用第三种方法。如果再不成功,则初始化失败,Oracle报告错误代码。

Semaphore:  可以看作一个标记。可以有On和Off两种状态。Oracle使用semaphores来实现服务器进程对SGA区的存取控制。  Shared memory 和semaphore 是Oracle在Unix上运行的重要资源。如果Oracle 实例得不到所需要的资源,实例启动就会失败。

参数:  对于运行一个Oracle实例的Solaris系统,改变/etc/system文件中的一些关于共享内存的参数,以使Oracle实例可以正常运行。如果有多个实例的话,还需根据下面方法重新计算某些值。

shmmax  含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。  设置方法:0.5*物理内存。如果物理内存为20G,则 0.5×20G×1024×1024=10485760  例子: Set shmsys:shminfo_shmmax=10485760

shmmin  含义:共享内存的最小大小。  设置方法:一般都设置成为1。  例子: Set shmsys:shminfo_shmmin=1

shmmni  含义:系统中共享内存段的最大个数。 推荐值为100或者128。  例子:Set shmsys:shminfo_shmmni=100

shmseg  含义:每个用户进程可以使用的最多的共享内存段的数目。 推荐值为20或者10。  例子:Set shmsys:shminfo_shmseg=20

semmni  含义:系统中semaphore identifierer的最大个数。推荐值为100或者128。  设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的那个值加10。  例子:Set semsys:seminfo_semmni=100

semmns  含义:系统中semaphores的最大个数。  设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。 详见下面“(semmns计算实例)”。  例子:Set semsys:seminfo_semmns=200

semmsl  含义:一个set中semaphore的最大个数。

设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。详见下面“(SEMMSL 计算实例)”  .  例子:Set semsys:seminfo_semmsl=200

  改变了/etc/system里边以上参数以后,重新启动计算机:   $reboot  然后检查当前的参数:   $sysdef -I  如果系统参数仍旧没有改变得话,使用以下命令:   $modload /kernel/sys/shmsys。

二、oracle在solaris下安装时参数的计算

SHMMAX maximum size of a shared memory segment  (共享内存段的最大字节数)  SHMMIN minimum size of shared memory segment  (共享内存段的最小尺寸)  SHMMNI maximum number of shared memory identifiers in the system  (系统中共享内存标识符的最大数目)  SHMSEG maximum number of shared memory segments a user process can attach  (每个用户进程可分配的最大共享内存段数目)  SEMMNI maximum number of semaphore identifiers in the system  (系统中信号灯标识符的最大数目)  SEMMSL maximum number of semaphores in a set  (每个(信号灯)集合中的信号灯的最大数目)  SEMMNS maximum number of semaphores in the system  (系统中信号灯的最大数目)  SEMOPM maximum number of operations per semop call  (每个semop调用的信号灯的最大数目)  SEMVMX semaphore maximum value  (信号灯最大值)

set semsys:seminfo_semmni 100

set semsys:seminfo_semmns 1024(semmns计算实例)

系统中各个Oracle实例的"init[SID].ora"文件中PROCESSES值的总和(不包括最大的那个PROCESSES值)+ 最大的那个PROCESSES值 * 2 + 10 * Oracle实例的个数。  注:[SID]即为具体的数据库实例名  例如,一个有三个 Oracle实例的系统,在各自的"initsid.ora"文件中的PROCESSES参数设置为下列值:  ORACLE_SID=A, PROCESSES=100   ORACLE_SID=B, PROCESSES=100   ORACLE_SID=C, PROCESSES=200  则 SEMMSL 值的计算方法如下(SEMMSL 计算实例):  SEMMSL = [(c=200) + 10] = 210  则 SEMMNS 值的计算方法如下:  SEMMNS = [(A=100) + (B=100)] + [(C=200) * 2] + [(# of instances=3) * 10] = 630

set semsys:seminfo_semmsl 256

SEMMSL 的值可以通过以下方式计算得到:  所有Oracle实例的"init[SID].ora"文件中最大的PROCESSES值 + 10   set semsys:seminfo_semvmx 32767   set semsys:seminfo_shmmax 12884901888    

24G *0.5 * 1024*1024 (24G是物理内存)  set semsys:seminfo_shmmin 100

三、solaris11 对内存参数的设置

1、使用prctl调整 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  这样所作的修改系统重启后就失效了

2、创建project,调整会记录到/etc/project里

可以使用下面的方法为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的方法应该会被这种方式逐步取代

相关推荐