欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

安装Oracle时,shmall、shmmax、kernel.sem的设置

程序员文章站 2023-09-20 22:16:57
最近因为拿到一个好配置的生产机器。在装完数据库后,需要对参数进行调优。 首先这个机器内存是128G的 ,而且/dev/shm 设置的是63G (物理内存的一半)。Oracle设置...

最近因为拿到一个好配置的生产机器。在装完数据库后,需要对参数进行调优。

首先这个机器内存是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 生效.