目前RHEL 6、OL6等操作系统版本已经成为部署oracle RAC数据库的主要选择,但是每当新事物出现的时候既会带来某系新颖功能,也会伴随着新问题的诞生。
本文针对Linux 6中出现的Transparent HugePage特性对Oracle RAC数据库的影响进行讨论,希望对即将在Linux 6上部署Oracle数据库的DBA提供借鉴。在谈
Transparent HugePages之前,先回顾一下传统的HugePages概念。
一、传统HugePages相关概念
首先看下Linux的内存管理方式。一个进程在访问内存时,首先参照一个本地的page table,本地page table中的条目指向系统page table,系统page table指向
真实的物理内存地址。每个page table的条目管理一定大小的内存区域。当使用的内存非常大的时候,page table中的条目会变得非常多,page table变得很大,
系统在内存管理方面的消耗会增加。另外,由于X86架构使用的虚拟内存架构,可能会存在内存交换(page in/out),当发生内存交换的时候,page table中的
条目指向发生变化,系统还需要维护这种变化。总之,当系统内存使用变得很大时,操作系统的内存管理变得很低效。可以通过下面的方式查看page table的大
小:
Linux就是通过上面提到的page table和kswapd进程管理使用的内存。为了加快内存地址的转换,Linux系统引入了TLB( Translation Lookaside Buffer,在CPU中的
一块内存区域,其中包含了部分的page table条目,一般TLB能存储4096个条目)。但系统使用的内存变大时,TLB的命中率会下降,导致内存管理效率变低。
普通的内存页一般是4k,也就是说一个page table条目指向一个4k的内存区域,这对于内存使用较大的系统会导致page table的条目急剧增加,因此Linux在2.6之后
的内核版本中加入了HugePages,HugePages提供了超过4k的内存页,从而减少page table的条目,进而加大TLB的命中率。而且,HugePages是不能被交换的,会
固定在物理内存中。
Oracle数据库是非常耗内存的,特别是在SGA较大的系统中内存使用尤为可观,所以,在SGA配置较大的系统中,建议使用HugePages提高内存管理效率,保障数据
库性能。但是需要注意,11g的AMM和HugePages是不兼容的,在启用HugePages时需要关闭oracle的AMM功能,但是可以使用ASMM。
二、Transparent HugePages
Transparent HugePages是在运行时由khugepaged进程动态的分配,而传统的HugePages是在系统启动时预先分配的,Transparent HugePages在Linux 6中被引入。Linux引入Transparent HugePages是为了提高内存管理效率,在Linux 6中默认被启用,可以通过下面的命令查看Transparent HugePages是否启用:
always表示启用了Transparent HugePages。可以通过下面的方法验证系统是否真正使用了Transparent HugePages:
当AnonHugePages的值大于0时,表示系统正在使用Transparent HugePages。
Oracle RAC与Transparent HugePages联合使用是存在问题,Transparent HugePages会影响RAC进程间通讯,因此可能导致节点重启或影响RAC性能,因此,在
使用RAC时,需要关闭Transparent HugePages。如果不关闭,可能在ocssd.log中可能会看到如下错误信息:
可以通过下面的方法关闭Transparent HugePages:
方法一:在/etc/grub.conf文件中添加如下内容并重启操作系统:
方法二:在/etc/rc.local文件中加入如下内容并重启操作系统:
另外,Transparent HugePages在Linux 6.5中已经去除。
本文针对Linux 6中出现的Transparent HugePage特性对Oracle RAC数据库的影响进行讨论,希望对即将在Linux 6上部署Oracle数据库的DBA提供借鉴。在谈
Transparent HugePages之前,先回顾一下传统的HugePages概念。
一、传统HugePages相关概念
首先看下Linux的内存管理方式。一个进程在访问内存时,首先参照一个本地的page table,本地page table中的条目指向系统page table,系统page table指向
真实的物理内存地址。每个page table的条目管理一定大小的内存区域。当使用的内存非常大的时候,page table中的条目会变得非常多,page table变得很大,
系统在内存管理方面的消耗会增加。另外,由于X86架构使用的虚拟内存架构,可能会存在内存交换(page in/out),当发生内存交换的时候,page table中的
条目指向发生变化,系统还需要维护这种变化。总之,当系统内存使用变得很大时,操作系统的内存管理变得很低效。可以通过下面的方式查看page table的大
小:
-
[root@pms2db2 ~]# more /proc/meminfo
-
MemTotal: 529187096 kB
-
MemFree: 508089256 kB
-
Buffers: 338312 kB
-
Cached: 13832532 kB
-
SwapCached: 0 kB
-
Active: 4271216 kB
-
Inactive: 12080448 kB
-
Active(anon): 3220544 kB
-
Inactive(anon): 10414564 kB
-
Active(file): 1050672 kB
-
Inactive(file): 1665884 kB
-
Unevictable: 355044 kB
-
Mlocked: 252844 kB
-
SwapTotal: 131071992 kB
-
SwapFree: 131071992 kB
-
Dirty: 2916 kB
-
Writeback: 0 kB
-
AnonPages: 2535896 kB
-
Mapped: 9457348 kB
-
Shmem: 11382680 kB
-
Slab: 443096 kB
-
SReclaimable: 215852 kB
-
SUnreclaim: 227244 kB
-
KernelStack: 41800 kB
-
PageTables: 271372 kB
-
NFS_Unstable: 0 kB
-
Bounce: 0 kB
-
WritebackTmp: 0 kB
-
CommitLimit: 395665540 kB
-
Committed_AS: 72022200 kB
-
VmallocTotal: 34359738367 kB
-
VmallocUsed: 1598060 kB
-
VmallocChunk: 34090390672 kB
-
HardwareCorrupted: 0 kB
-
AnonHugePages: 1060864 kB
-
HugePages_Total: 0
-
HugePages_Free: 0
-
HugePages_Rsvd: 0
-
HugePages_Surp: 0
-
Hugepagesize: 2048 kB
-
DirectMap4k: 4096 kB
-
DirectMap2M: 2027520 kB
- DirectMap1G: 534773760 kB
一块内存区域,其中包含了部分的page table条目,一般TLB能存储4096个条目)。但系统使用的内存变大时,TLB的命中率会下降,导致内存管理效率变低。
普通的内存页一般是4k,也就是说一个page table条目指向一个4k的内存区域,这对于内存使用较大的系统会导致page table的条目急剧增加,因此Linux在2.6之后
的内核版本中加入了HugePages,HugePages提供了超过4k的内存页,从而减少page table的条目,进而加大TLB的命中率。而且,HugePages是不能被交换的,会
固定在物理内存中。
Oracle数据库是非常耗内存的,特别是在SGA较大的系统中内存使用尤为可观,所以,在SGA配置较大的系统中,建议使用HugePages提高内存管理效率,保障数据
库性能。但是需要注意,11g的AMM和HugePages是不兼容的,在启用HugePages时需要关闭oracle的AMM功能,但是可以使用ASMM。
二、Transparent HugePages
Transparent HugePages是在运行时由khugepaged进程动态的分配,而传统的HugePages是在系统启动时预先分配的,Transparent HugePages在Linux 6中被引入。Linux引入Transparent HugePages是为了提高内存管理效率,在Linux 6中默认被启用,可以通过下面的命令查看Transparent HugePages是否启用:
-
[root@pms2db2 ~]# more /sys/kernel/mm/transparent_hugepage/enabled
- [always] never
-
[root@pms2db2 ~]# grep AnonHugePages /proc/meminfo
- AnonHugePages: 1050624 kB
Oracle RAC与Transparent HugePages联合使用是存在问题,Transparent HugePages会影响RAC进程间通讯,因此可能导致节点重启或影响RAC性能,因此,在
使用RAC时,需要关闭Transparent HugePages。如果不关闭,可能在ocssd.log中可能会看到如下错误信息:
-
[ CSSD][224204544]clssscMonitorThreads clssnmvKillBlockThread not scheduled for 7500 msecs
- [ CSSD][224204544]clssscMonitorThreads clssnmvWorkerThread not scheduled for 8030 msecs
方法一:在/etc/grub.conf文件中添加如下内容并重启操作系统:
- transparent_hugepage=never
-
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
-
echo never > /sys/kernel/mm/transparent_hugepage/enabled
-
fi
-
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
-
echo never > /sys/kernel/mm/transparent_hugepage/defrag
- fi
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29821678/viewspace-1755245/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29821678/viewspace-1755245/