ITPub博客

首页 > 数据库 > Oracle > Transparent HugePages对Oracle RAC数据库的影响

Transparent HugePages对Oracle RAC数据库的影响

原创 Oracle 作者:Darren_Guo 时间:2015-07-29 13:09:49 0 删除 编辑
    目前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的大
小:
  1. [root@pms2db2 ~]# more /proc/meminfo
  2. MemTotal: 529187096 kB
  3. MemFree: 508089256 kB
  4. Buffers: 338312 kB
  5. Cached: 13832532 kB
  6. SwapCached: 0 kB
  7. Active: 4271216 kB
  8. Inactive: 12080448 kB
  9. Active(anon): 3220544 kB
  10. Inactive(anon): 10414564 kB
  11. Active(file): 1050672 kB
  12. Inactive(file): 1665884 kB
  13. Unevictable: 355044 kB
  14. Mlocked: 252844 kB
  15. SwapTotal: 131071992 kB
  16. SwapFree: 131071992 kB
  17. Dirty: 2916 kB
  18. Writeback: 0 kB
  19. AnonPages: 2535896 kB
  20. Mapped: 9457348 kB
  21. Shmem: 11382680 kB
  22. Slab: 443096 kB
  23. SReclaimable: 215852 kB
  24. SUnreclaim: 227244 kB
  25. KernelStack: 41800 kB
  26. PageTables: 271372 kB
  27. NFS_Unstable: 0 kB
  28. Bounce: 0 kB
  29. WritebackTmp: 0 kB
  30. CommitLimit: 395665540 kB
  31. Committed_AS: 72022200 kB
  32. VmallocTotal: 34359738367 kB
  33. VmallocUsed: 1598060 kB
  34. VmallocChunk: 34090390672 kB
  35. HardwareCorrupted: 0 kB
  36. AnonHugePages: 1060864 kB
  37. HugePages_Total: 0
  38. HugePages_Free: 0
  39. HugePages_Rsvd: 0
  40. HugePages_Surp: 0
  41. Hugepagesize: 2048 kB
  42. DirectMap4k: 4096 kB
  43. DirectMap2M: 2027520 kB
  44. DirectMap1G: 534773760 kB
   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是否启用:

  1. [root@pms2db2 ~]# more /sys/kernel/mm/transparent_hugepage/enabled
  2. [always] never
always表示启用了Transparent HugePages。可以通过下面的方法验证系统是否真正使用了Transparent HugePages:
  1. [root@pms2db2 ~]# grep AnonHugePages /proc/meminfo
  2. AnonHugePages: 1050624 kB
当AnonHugePages的值大于0时,表示系统正在使用Transparent HugePages。
  Oracle RAC与Transparent HugePages联合使用是存在问题,Transparent HugePages会影响RAC进程间通讯,因此可能导致节点重启或影响RAC性能,因此,在
使用RAC时,需要关闭
Transparent HugePages。如果不关闭,可能在ocssd.log中可能会看到如下错误信息:
  1. [ CSSD][224204544]clssscMonitorThreads clssnmvKillBlockThread not scheduled for 7500 msecs
  2. [ CSSD][224204544]clssscMonitorThreads clssnmvWorkerThread not scheduled for 8030 msecs
    可以通过下面的方法关闭Transparent HugePages:
   方法一:在/etc/grub.conf文件中添加如下内容并重启操作系统:
  1. transparent_hugepage=never
   方法二:在/etc/rc.local文件中加入如下内容并重启操作系统:
  1. if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  2.    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  3. fi
  4. if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  5.    echo never > /sys/kernel/mm/transparent_hugepage/defrag
  6. fi
    另外,Transparent HugePages在Linux 6.5中已经去除。





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29821678/viewspace-1755245/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-08-23

  • 博文量
    29
  • 访问量
    482168