安装Oracle时,shmall、shmmax、kernel.sem的设置
最近因为拿到一个好配置的生产机器。在装完数据库后,需要对参数进行调优。
首先这个机器内存是128G的 ,而且/dev/shm 设置的是63G (物理内存的一半)。Oracle设置用的是AMM管理,那么就想是否能把这个内存设置大点。
首先这个参数文件在 vi /etc/sysctl.conf 里,重新加载生效是 sysctl -p
# System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/.conf file # # For more information, see sysctl.conf(5) and sysctl.d(5). #ORACLE SETTING fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 15728640 kernel.shmmax = 64424509440 kernel.shmmni = 4096 kernel.sem = 5010 641280 5010 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586
kernel.shmall: 共享内存页数的最大值
Linux共享内存页大小为4KB, 共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,需要共享内存页数是
16GB/4KB=16777216KB/4KB=4194304(页)
kernel.shmmax:单个共享内存段的最大值
shmmax是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax设置应足够大,能在一个共享内存段下容纳下整个的SGA,设置的过低可能会导致需要创建多个共享内存段,可能导致系统性能的下降 。
kernel.shmmni:共享内存段的最大数量
注意该参数不是shmmin,是shmmni,shmmin 表示内存段最小大小 )
shmmni缺省值4096 足够。
shmmax(bytes) = shmmni(page size, default 4k) * shmall (page的个数)
下面专门说说kernel.sem:对应4个值
SEMMSL、SEMMNS、SEMOPM、SEMMNI
SEMMSL: 每个信号集的最大信号数量
数据库最大 PROCESS 实例参数的设置值再加上 10 。
oracle 建议将 SEMMSL 的值设置为不少于 100 。
SEMMNS:用于控制整个 linux 系统中信号(而不是信号集)的最大数。
Oracle 建议将 SEMMNS 设置为:系统中每个数据库的 PROCESSES 实例参数设置值的总和,加上最大 PROCESSES 值的两倍,最后根据系统中 Oracle 数据库的数量,每个加 10 。
使用以下计算式来确定在 Linux 系统中可以分配的信号的最大数量。它将是以下两者中较小的一个值:SEMMNS 或 (SEMMSL * SEMMNI)
SEMOPM: 内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量。semop 系统调用(函数)提供了利用一个 semop 系统调用完成多项信号操作的功能。一个信号集能够拥有每个信号集中最大数量的SEMMSL 信号,因此建议设置 SEMOPM 等于SEMMSL 。
Oracle 建议将 SEMOPM 的值设置为不少于 100 。
SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量。
Oracle 建议将 SEMMNI 的值设置为不少于 100 。
设计完这些之后可以 sysctl -p 生效.
下一篇: 如此强悍笑话