Oracle Rac:关闭透明大页的原因及方法

																				 note-taker:Ethan_Yang 
																			 recording time: 2019/07/24 
																						number of docs:8

【前言】

在Oracle安装之前的准备工作中,有一项必须的工作是:禁用透明巨页(Disabling Transparent HugePages)。

那问题来了:

   为什么要关闭透明大页? 以及怎么进行禁用?
   先来看下比较权威的介绍:

https://blogs.oracle.com/linux/performance-issues-with-transparent-huge-pages-thp
Oracle Rac:关闭透明大页的原因及方法_第1张图片
Oracle Rac:关闭透明大页的原因及方法_第2张图片
划重点:

根据上述文中标红处,简单来说就是Oracle Linux team在测试的过程中发现,如果linux开启透明巨页THP,则I/O读写性能降低30%;如果关闭透明巨页THP,I/O读写性能则恢复正常。另,建议在Oracle Database中不要使用THP。

接下来看下透明巨大页面是个嘛?

Linux下的大页分为两种类型:标准大页(Huge Pages)和透明巨页(Transparent Huge Pages)。

1). 标准大页(Huge Pages)是从Linux Kernel 2.6后被引入的。目的是用更大的内存页面(memory page size) 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。

2). 透明巨页(Transparent Huge Pages)缩写为THP,透明超大页面(THP)在RHEL 6中默认情况下对所有应用程序都是启用的。内核试图尽可能分配巨大的页面,主内核地址空间本身被映射为巨大的页面,减少了内核代码的TLB压力。内核将始终尝试使用巨页来满足内存分配。如果没有可用的巨大页面(例如由于物理连续内存不可用),内核将回退到正常的4KB页面。THP也是可交换的(不像hugetlbfs)。这是通过将大页面分成更小的4KB页面来实现的,然后这些页面被正常地换出。

两者区别在于大页的分配机制,标准大页管理是预分配方式,而透明巨页管理则是动态分配方式。目前透明巨页与传统大页混合使用会出现一些问题,导致性能问题和系统重启。ORACLE官方不建议在使用RedHat 6, OEL 6, SLES 11 and UEK2 kernels 时开启透明巨页(THP),因为透明巨页存在一些问题:

  1. 在RAC环境下,透明巨页(THP)会导致异常节点重启和性能问题;

  2. 在单机环境中,透明巨页(THP)也会导致一些异常的性能问题;

在Linux6.x之后的平台,在安装Oracle时都建议关闭透明巨页。

默认情况下,Red Hat Enterprise Linux 6,SUSE Linux Enterprise Server 11和Oracle Linux 6与早期版本的Oracle Linux Unbreakable Enterprise Kernel 2(UEK2)内核一起启用透明HugePages内存。在Oracle Linux UEK2内核的更高版本中禁用透明HugePages内存,Transparent HugePages可能导致运行时内存分配延迟。

为避免性能问题,Oracle建议您在所有Oracle数据库服务器上禁用透明超大页面。Oracle建议您使用标准的HugePages来提高性能.Transparent HugePages内存与标准HugePages内存不同,因为内核khugepaged线程在运行时动态分配内存。标准HugePages内存在启动时预先分配,并且在运行时不会更改。
下一个问题:

如何关闭透明巨页(THP)?

Linux7 默认情况下 是开启透明巨页功能的。检查系统对应版本

 [root@ethanDB ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)

Disabling Transparent HugePages

[root@ethanDB ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

默认情况下,状态为always,需要调整为never

THP禁用方的几种方法

方法1:

[root@ethanDB ~]# vi /etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root rhgb quiet transparent_hugepage=never"

Oracle Rac:关闭透明大页的原因及方法_第3张图片
运行下列命令使之修改生效:

[root@ethanDB ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

方法2:

上面的方法重启之后好像并没生效,可用以下方法:

或:Add the following lines in /etc/rc.local and reboot the server:

[root@ethanDB ~]#vi /etc/rc.local
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

Oracle Rac:关闭透明大页的原因及方法_第4张图片

[root@ethanDB ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

方法3:

[root@ethanDB ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@ethanDB ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always madvise [never]

查看是否关闭透明巨页

[root@ethanDB ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always madvise [never]

如果输出结果为[always]表示透明巨页启用了。[never]表示透明巨页禁用;

[root@ethanDB ~]# grep -i HugePages_Total /proc/meminfo

如果HugePages_Total,返回0,也意味着透明巨页禁用了

[root@ethanDB ~]# cat /proc/sys/vm/nr_hugepages

返回0也意味着透明巨页禁用了。

【结语】

  1. 本文讲述了Oracle 禁Transparent HugePages的原因和方法;

  2. 从RedHat 6,OEL 6,SLES 11和UEK2内核开始,系统缺省会启用 Transparent HugePages,用来提高内存管理的性能透明巨页(Transparent HugePages )和之前版本中的大页功能上类似。主要的区别是:Transparent HugePages 可以实时配置,不需要重启才能生效配置;

  3. 透明HugePages类似于以前Linux版本中可用的HugePages。主要区别在于透明HugePages是在运行时由内核中的khugepaged线程动态设置,常规的HugePages必须在启动时预先分配。

  4. 透明超大页面已知会导致意外的节点重新启动并导致RAC出现性能问题,因此Oracle强烈建议禁用透明超大页面。即使在单实例数据库环境中,也会出现意外的性能问题或延迟。

【参考】

https://www.2cto.com/database/201804/735762.html

【参考】

https://access.redhat.com/solutions/422283

【参考】

https://blogs.oracle.com/linux/performance-issues-with-transparent-huge-pages-thp

【参考】

https://blog.51cto.com/8026776/2074544

如果大家觉得此文有帮助,欢迎关注个人微信公众号;

长按识别二维码或公众号搜索“一森咖记”

你可能感兴趣的:(oracle)