暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

内存参数

原创 逆风飞翔 2021-09-09
397

(1)kernel.shmall = 2097152 #该参数是控制共享内存页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。如果一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB = 16777216KB/4KB = 4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。简言之,该参数的值始终应该至少为:ceil(SHMMAX/PAGE_SIZE)。这个值太小有可能导致数据库启动报错(ORA-27102: out of memory)。

(2)kernel.shmmax = 1054472192 #定义一个内存段最大可以分配的内存空间,单位为字节。如果定义太小,那么会导致启动实例失败,或者SGA就会被分配到多个共享内存段。那么内存中的指针连接会给系统带来一定的开销,从而降低系统性能。这个值的设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,最大值可以设置成大于或等于实际的物理内存。如果kernel.shmmax为100M,SGA_MAX_SIZE为500M,那么启动Oracle实例至少会分配5个共享内存段;如果设置kernel.shmmax为2G,SGA_MAX_SIZE为500M,那么启动Oracle实例只需要分配1个共享内存段。

(3)kernel.shmmni = 4096 #表示单个共享内存段的最小值,一般为4KB,即4096bit,该参数的默认值是4096。这一数值已经足够,通常不需要更改。

(4)kernel.sem = 250 32000 100 128 #信号灯的相关配置,信号灯semaphores是进程或线程间访问共享内存时提供同步的计数器。可以通过命令“cat proc/sys/kernel/sem”来查看当前信号灯的参数配置,如下所示:

1[root@edsir4p1 ~]# cat /proc/sys/kernel/sem
2250 32000 100 128

其4个值的含义分别如下:
SEMMSL:此参数用于控制每个信号集的最大信号数,Oracle建议将SEMMNI设置为不小于100。
 SEMMNS:此参数用于控制整个Linux系统中信号(而不是信号集)的最大数量。
 SEMOPM:此参数用于控制每个semop系统调用可以执行的信号操作数,Oracle建议将SEMOPM的值设置为不少于100
 SEMMNI:此内核参数用于控制整个Linux系统中信号集的最大数量,Oracle建议将SEMMNI设置为不小于100。Oracle10g和11g的推荐值为142。

与内核参数查看和修改相关的常用命令如下所示:

l 查看生效的内核参数:more proc/sys/kernel/shmmax

l 临时生效:echo 3145728 > proc/sys/kernel/shmmax #临时设置shmmax为3M

l 永久生效,可以修改文件:/etc/sysctl.conf,并使修改参数立即生效:/sbin/sysctl -p

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论