一直对linux下的几个内核参数概念比较模糊,比如:kernel.shmall kernel.shmmax kernel.shmmni kernel.sem等等,还有配置好数据库后,ipcs命令的输出。
1. 希望能详细解释下这些参数,都是做什么的,配置后会对sga或pga产生哪些影响。以及如何根据现有的服务器配置合理的调整这些参数?
2. 什么时候需要操作系统层面启用huge memory,大内存页,如果启用的话,oracle层面的参数需要做哪些调整? 谢谢
1、shm那几个是影响共享内存设置的,也就对应oracle中的sga,分别是设定共享内存总量,单个段的大小等,如果单个共享内存段小于sga的大小,那么sga就会分配多个共享内存段。sem是设置信号灯相关的参数,这些google一下就可以了吧,至于ipcs么,dba最大可能用在数据库shutdown abort后清理共享资源用,因为abort后,可能共享内存、信号灯这些的可能没释放,此时就需要用ipcs查出相应id,然后使用ipcrm释放资源。
2、使用大内存页:a)减小TLB的大小; b)大内存页不会swap out。没有使用hugepage的linux,过一段时间后可能会出现多个swapd进程占用100% cpu的情况,此时连登录os都很慢。
设置hugepage步骤可参见mos doc id:748637.1,大致步骤如下:
1)关闭oracle的AMM内存管理模式
2)查看 /proc/meminfo确定大内存页的大小,计算sga用量,然后除以内存页大小以计算需要使用的大内存页数目,然后适当放大
3)修改/etc/sysctl.conf增加 vm.nr_hugepages=计算出的值,sysctl -p
4)编辑/etc/security/limit.conf,增加如下两行
oracle soft memlock unlimited
oracle hard memlock unlimited
5)重启数据库,然后grep HugePages /proc/meminfo查看HugePages_Free与HugePages_Total,如果Free的值很小,那么确实使用了hugepage
收起