[转帖]oracle内核参数详解

oracle,内核,参数,详解 · 浏览次数 : 0

小编点评

**使用内存大小** ```bash sga/2M稍微大一点即可或者使用脚本计算 ``` **内存分配** ```bash kernel.panic = 1(当系统发生oops或BUG时,所采取的措施0:继续运行;1:让klog记录oops的输出,然后panic,若kernel.panic不为0,则等待后重新引导内核)kernel.sysrq=1(该文件指定的值为非零,则激活键盘上的sysrq按键。这个按键用于给内核传递信息,用于紧急情况下重启系统.)net.ipv4.conf.bond1.rp_filter = 2(0:不开启源地址校验。1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包)net.ipv4.ipfrag_high_thresh = 33554432(系统中当数据包传输发生错误,会进行碎片整理,有效的数据包被保留,而无效的数据包被丢弃,ipfrag参数指定了碎片整理时的最大内存。)net.ipv4.ipfrag_low_thresh = 31457280(系统中当数据包传输发生错误,会进行碎片整理,有效的数据包被保留,而无效的数据包被丢弃,ipfrag参数指定了碎片整理时的最小内存。) ``` **内存碎片整理** ```bash ipfrag high_thresh = 33554432(系统中当数据包传输发生错误,会进行碎片整理,有效的数据包被保留,而无效的数据包被丢弃)ipfrag low_thresh = 31457280(系统中当数据包传输发生错误,会进行碎片整理,有效的数据包被保留,而无效的数据包被丢弃 ```

正文

https://www.cnblogs.com/penggepiaopiao/p/11983007.html

 

一、前言

       在生产中,我们安装oracle数据库时,为达到最优我们需要对操作系统的内核参数进行一定的调整。主要从内存、cpu、io以及网络等方面,根据实际情况进行调整。以下参数可供大家参考,如有不当之处还望大家指出,一起研究学习。

二、参数调整建议

参数名称                                                           含义                                                          建议值                        
kernel.shmmax  单个共享内存段的最大值 取内存大小减1,单位为byte
kernel.shmall 控制共享内存页数 4294967296
kernel.shmmni   共享内存段的最大数量 4096
kernel.sem 信号集容纳最大信号数量 所有信号的最大数量 调用单个信号集中最大信号数量 信号集的最大值 5010 641280 5010 128
fs.file-max  系统中所允许的文件句柄最大数目 512 乘以 processes
fs.aio-max-nr  限制并发未完成的请求 10485760
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  发送套接字缓冲区大小的最大值 1048576
vm.nr_hugepages   大页,直接分配并保留对应大小的内存区域 sga/2M稍微大一点,可参考MOS:749851.1
vm.vfs_cache_pressure directory和inode cache保持在一个合理的百分比 200
vm.swappiness  内存使用率剩余多少时开始使用swap 10
vm.min_free_kbytes  最低保留多少内存 524288
vm.dirty_ratio 脏页数量达到系统总内存的多大比例触发pdflush/flush/kdmflush等后台回写进程 5
vm.dirty_background_ratio 所有全局系统进程的脏页数量达到系统总内存的多大比例触发pdflush/flush/kdmflush等后台回写进程 5
vm.dirty_writeback_centisecs 唤起去刷新脏数据的时间 100,单位1/100秒
vm.dirty_expire_centisecs  指定脏数据能存活的时间 100,单位1/100秒
vm.drop_caches  清空缓存机制 3
vm.overcommit_memory 内存申请分配机制 2
vm.overcommit_ratio 物理内存分配时的比例 90
kernel.panic 系统发生panic时内核重新引导之前的等待时间 10
kernel.panic_on_oops 当系统发生oops或BUG时,所采取的措施 1
kernel.sysrq 文件指定的值为非零,则激活键盘上的sysrq按键 1
net.ipv4.conf.bond1.rp_filter 开启源地址校验规则 2
net.ipv4.ipfrag_high_thresh  碎片整理时的最大内存 33554432
net.ipv4.ipfrag_low_thresh 碎片整理时的最小内存 31457280

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、参数详解

# Controls the maximum shared segment size, in bytes

kernel.shmmax = 34359738368  

(定义单个共享内存段的最大值,设置应该足够大,能在一个共享内存段下容纳下整个的SGA,设置过低可能会导致需要创建多个共享内存段)

建议值:取内存大小减1

ipcs -sa查看共享内存段的个数

cat /etc/sysctl.conf | grep kernel.shmmax

 举例:

sga_target=1G,

kernel.shmmax = 102400000

如下图所示,共享内存段分成了10个,导致oracle性能有一定的下降。

 

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296

(kernel.shmall 参数是控制共享内存页数。该参数大小为物理内存除以pagesize;默认值已经是4294967296*4k/1024/1024/1024=16T足够大了,一般不用改。)

[root@ceshi ~]# getconf PAGE_SIZE

4096

一个共享内存页为4k

 

kernel.shmmni = 4096

(shmmni 内核参数是共享内存段的最大数量,缺省值 4096 ,一般肯定是够用了)

kernel.sem = 5010 641280 5010 128

(信号集容纳最大信号数量 所有信号的最大数量 调用单个信号集中最大信号数量 信号集的最大值)

fs.file-max = 6815744

(该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量,fs.file-max为512 乘以 processes)

fs.aio-max-nr = 10485760

(此参数限制并发未完成的请求,应该设置避免I/O子系统故障)

net.ipv4.ip_local_port_range = 9000 65500

(当前系统开放端口范围,默认是32768到61000,对于繁忙的网络服务器需要增加网络端口范围来增强它的处理能力)

[root@ceshi ~]# cat /proc/sys/net/ipv4/ip_local_port_range

32768      61000

net.core.rmem_default = 262144

(接收套接字缓冲区大小的默认值)

net.core.rmem_max = 4194304

(接收套接字缓冲区大小的最大值)

net.core.wmem_default = 262144

(发送套接字缓冲区大小的默认值)

net.core.wmem_max = 1048576

(发送套接字缓冲区大小的最大值)

vm.nr_hugepages = 16400

(在系统启动时,直接分配并保留对应大小的内存区域,使用改参数时需要禁用AMM)

计算公式:sga/2M稍微大一点即可或者使用脚本计算,可参考MOS:749851.1

vm.vfs_cache_pressure=200

(缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;该值低于100,将导致内核倾向于保留directory和inode cache;该值超过100,将导致内核倾向于回收directory和inode cache)

vm.swappiness=10

(表示内存使用率超过90%时开始出现有交换分区的使用)

vm.min_free_kbytes=524288

(最低保留多少内存,设置过高会触发kswapd0进程消耗大量 CPU一般512M即可)

vm.dirty_ratio = 5

(单个进程的脏页数量达到系统总内存的多大比例后,就会触发pdflush/flush/kdmflush等后台回写进程运行。)

vm.dirty_background_ratio=5

(所有全局系统进程的脏页数量达到系统总内存的多大比例后,就会触发pdflush/flush/kdmflush等后台回写进程运行)

vm.dirty_writeback_centisecs=100

(单位:1/100秒;表示每1秒pdflush会被唤起去刷新脏数据,如果刷新脏数据的时间超过了这个时间,完成后将会sleep1秒)

vm.dirty_expire_centisecs=100

(单位:1/100秒;指定脏数据能存活的时间,超过该时间就会从内存中写入磁盘)

vm.drop_caches=3

(1表示清空页缓存;2表示清空inode和目录树缓存;3表示清空所有缓存)

注意:手动清理时需要执行sync命令将数据同步到磁盘

sync

echo 3 > /proc/sys/vm/drop_caches

vm.overcommit_memory=2

(0表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2表示内核允许分配超过所有物理内存和交换空间总和的内存)

vm.overcommit_ratio=90

(当vm.overcommit_memory=2时生效,为物理内存分配时的比例)

结合以上两个参数可以计算可以:

使用的内存大小为= SWAP内存大小 + 物理内存 * overcommit_ratio / 100

kernel.panic = 10

(单位秒,系统发生panic时内核重新引导之前的等待时间,0表示禁止重新引导)

kernel.panic_on_oops = 1

(当系统发生oops或BUG时,所采取的措施0:继续运行;1:让klog记录oops的输出,然后panic,若kernel.panic不为0,则等待后重新引导内核)

kernel.sysrq=1

(该文件指定的值为非零,则激活键盘上的sysrq按键。这个按键用于给内核传递信息,用于紧急情况下重启系统。当遇到死机或者没有响应的时候,甚至连 tty 都进不去,可以尝试用 SysRq 重启计算机。)

net.ipv4.conf.bond1.rp_filter = 2

(0:不开启源地址校验。1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包)

net.ipv4.ipfrag_high_thresh = 33554432

(系统中当数据包传输发生错误,会进行碎片整理,有效的数据包被保留,而无效的数据包被丢弃,ipfrag参数指定了碎片整理时的最大内存。)

net.ipv4.ipfrag_low_thresh = 31457280

(系统中当数据包传输发生错误,会进行碎片整理,有效的数据包被保留,而无效的数据包被丢弃,ipfrag参数指定了碎片整理时的最小内存。)

一直在路上!

与[转帖]oracle内核参数详解相似的内容:

[转帖]oracle内核参数详解

https://www.cnblogs.com/penggepiaopiao/p/11983007.html 一、前言 在生产中,我们安装oracle数据库时,为达到最优我们需要对操作系统的内核参数进行一定的调整。主要从内存、cpu、io以及网络等方面,根据实际情况进行调整。以下参数可供大家参考,如

[转帖]oracle内核参数详解

https://www.cnblogs.com/penggepiaopiao/p/11983007.html 一、前言 在生产中,我们安装oracle数据库时,为达到最优我们需要对操作系统的内核参数进行一定的调整。主要从内存、cpu、io以及网络等方面,根据实际情况进行调整。以下参数可供大家参考,如

[转帖]Oracle参数解析(parallel_force_local)

https://www.modb.pro/db/122032 是否需要增加这个参数? 往期专题请查看www.zhaibibei.cn这是一个坚持Oracle,Python,MySQL原创内容的公众号 前面介绍了Oracle的基本参数,从这节开始讲其他的参数,参数从v$parameter中提取 基本参

[转帖]create table INITRANS参数分析

https://www.modb.pro/db/44701 1. 内容介绍 Oracle数据库create table时使用INITRANS参数设置数据块ITL事务槽的数量,确保该数据块上 并发事务数量。参数内容总结如下, 1. Oracle 8K blocksize 数据块初始 2个itl,8K

[转帖]【JVM系列JKD8】参数参考表

JVM是Java底层核心要素,可以说Java生态的东西都是运行在JVM里面的。From:https://docs.oracle.com/javase/8/docs/ JVM参数的含义 JVM参数说明 参数名称含义默认值-Xms初始堆大小物理内存的1/64(<1GB)默认(MinHeapFreeRat

[转帖]Oracle 内核代码层:KS / KX / KT 等内核缩写的释义

Oracle 内核代码层:KS / KX / KT 等内核缩写的释义 https://www.modb.pro/db/87450 Oracle 内核层代码缩写以及释义 - Oracle Kernel Database Layers KS: Kernel Services KX: Kernel Exe

[转帖]如何判断oracle内存是否够用

https://www.modb.pro/db/431194 给数据库分配的内存,在topas当中看,是属于计算内存,从内存栈分类上来说是共享内存。如果给数据库分配XX GB内存,那么数据库使用的内存不含超过这个限制。但至于这些内存够不够用,就要看业务系统是否能够接受当前的响应时间等性能指标,能接受

[转帖]Oracle数据库中ITL详解

首先说明这篇文章是转载的,原文地址:http://blog.sina.com.cn/s/blog_616b428f0100lwvq.html 1、什么是ITL ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,用来记录该块所有发生的事务,一个it

[转帖]Oracle数据库开启NUMA支持

NUMA简介 NUMA(Non Uniform Memory Access Architecture,非统一内存访问)把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互。因此节点的所有内存对于本节点所有的CPU都是

[转帖]Oracle优化案例:vfs_cache_pressure和min_free_kbytes解决RMAN挂起问题

https://www.modb.pro/db/34028 环境: Oracle 11gr2 + dataguard 512GB内存 + 128核cpu + 高性能存储服务器 uname -an Linux dbhost 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22: