今天同事在centos 6.1下安装oracle 10g,说实话是个很苦逼的活,本来就对于系统那些繁琐的包自己都觉得很麻烦,所以在前面选择服务上面都选对的选择多了点,后面就很少缺少gcc lib compat等类型的包了。不过linux 6下可不买这个帐了,总是安装过程同事说到是个很痛苦的过程。其实其中的曲折自己不太清楚,但是在dbca建库开始时出现的ora-27125还是值得斟酌的。
ORA-27125: unable to create shared memory segment
无法分配创建共享内存段,这点开始以为是/etc/sysctl.conf中的设置问题,不过查看其实问题不在这儿。
正确的办法是修改/proc/sys/vm/hugetlb_shm_group中的记录
[root@server119 security]# id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba) context=user_u:system_r:unconfined_t:s0
[root@server119 security]# more /proc/sys/vm/hugetlb_shm_group
0
[root@server119 security]# echo 501 > /proc/sys/vm/hugetlb_shm_group
[root@server119 security]# more /proc/sys/vm/hugetlb_shm_group
501
而后正常运行可以运行dbca建库。
摘要下Hugepage/Big page
系统进程是通过虚拟访问内存page table,那么cpu就需要将虚拟地址转换为物理内存地址ram+swap才能真正访问,cpu会缓存最近的虚拟内存地址和物理内存地址的映射关系(有点像lru list的管理),保存在由一个cpu维护的映射表中(linux在cpu申请固定大小buffer称为TLB用来管理page table),当然如果物理内存很大,越来越多的虚拟内存地址和物理地址被映射,当然对cpu检索还是会有一定的影响。
在linux环境下,内存都是以页 4kb的单位来定义的,如果要减少映射关系,需要使用大的内存页,相对来说hugepage也就是所谓的巨页内存,hugepage会一直keep在内存中,不会被交换出去,减少频繁的page in和page out,不能被其进程存占用,当使用大量物理内存的服务器时(8g下就建议使用hugepage),还是建议使用hugepage,对于oracle服务器来说,直接设置器hugepage pool等于sga即可。
可以通过如下方式查看Hugepage页的相关信息
[root@server119 security]# cat /proc/meminfo |grep Huge
HugePages_Total: 0 –Hugepage的页面数量
HugePages_Free: 0 --剩余的页面数量
HugePages_Rsvd: 0 --被分配预留但是没有使用的page数量
Hugepagesize: 2048 kB --Hugehuge的单个页面的大小
默认是没有开启Hugepage的。
Oracle 10g可以通过设置sysctl.conf的vm.nr_hugepages参数来启用hugepage,vm.nr_hugepages相当于普通页内存的参数kernel.shmall的功能。设置vm.nr_hugepages参数后重启系统。
[root@server119 security]# cat /proc/meminfo |grep Huge
HugePages_Total: 300 –Hugepage的页面数量
HugePages_Free: 20 --剩余的页面数量
HugePages_Rsvd: 0 --被分配预留但是没有使用的page数量
Hugepagesize: 2048 kB --Hugehuge的单个页面的大小
Oracle 11g由于启用amm管理,amm和hugepgae不兼容,需要先关闭amm特性,而后参照oracle 10g的pugepage设置。
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1059186/ ,如需转载,请注明出处,否则将追究法律责任。