暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

linux 6 透明大页和标准大页

linux 6大页设置

1.1linux 6 禁用透明大页

官方文档资料:

Disabling Transparent HugePages

Starting with Red Hat Enterprise Linux 6, Oracle Linux 6, SUSE 11 and Unbreakable Enterprise Kernel 2 (UEK2) kernels, Transparent HugePages are enabled by default at runtime. However, Transparent HugePages might cause delays 

in memory allocation because memory is allocated dynamically. Hence, Oracle recommends that you disable Transparent HugePages on all Oracle Database servers to avoid performance issues.

Although Transparent HugePages are similar to HugePages, they are set up dynamically at runtime by the khugepaged thread in the kernel while standard HugePages are preallocated at startup. 

Oracle recommends that you use standard HugePages for enhanced performance.

To check if Transparent HugePages are enabled run one of the following commands as the root user:

Red Hat Enterprise Linux kernels:

# cat /sys/kernel/mm/redhat_transparent_hugepage/enab'led

Other kernels:

# cat /sys/kernel/mm/transparent_hugepage/enabled

The following is a sample output that shows Transparent HugePages are being used as the [always] flag is enabled.

[always] never

Note:

If Transparent HugePages are removed from the kernel then the /sys/kernel/mm/transparent_hugepage or /sys/kernel/mm/redhat_transparent_hugepage files do not exist.

To disable Transparent HugePages perform the following steps:

  1. Add the following entry to the kernel boot line in the /etc/grub.conf file:

    transparent_hugepage=never
    

    For example:

    title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never
            initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img
    
  2. Restart the system to make the changes permanent.

1.2 实际操作:

1.2.1 查看透明大页状态

[root@racdbdg grub]# cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

[always]表示透明大页启用

1.2.2 添加 transparent_hugepage=never 到 /etc/grub.conf

[root@racdbdg ~]# vi  /etc/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,1)

#          kernel /vmlinuz-version ro root=/dev/sda4

#          initrd /initrd-[generic-]version.img

#boot=/dev/sda1

device (hd0) HD(1,800,1f4000,fddaa853-5701-4852-9d09-318f8c745a14)

default=1

timeout=5

splashimage=(hd0,1)/grub/splash.xpm.gz

hiddenmenu

title Oracle Linux Server Unbreakable Enterprise Kernel (4.1.12-61.1.28.el6uek.x86_64)

root (hd0,1)

kernel /vmlinuz-4.1.12-61.1.28.el6uek.x86_64 ro root=UUID=2ee4f5d9-d364-4dc5-8c1f-6e8746670d00 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=a

uto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet        initrd /initramfs-4.1.12-61.1.28.el6uek.x86_64.img

title Oracle Linux Server Red Hat Compatible Kernel (2.6.32-696.el6.x86_64)

root (hd0,1)

kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=2ee4f5d9-d364-4dc5-8c1f-6e8746670d00 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M  KE

YBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet transparent_hugepage=never        

        initrd /initramfs-2.6.32-696.el6.x86_64.img

1.2.3 重启系统

reboot

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

always madvise [never]

[never]表示已经禁用透明大页

2.标准大页的配置

大页设置步骤“关闭数据库-->调整大页-->启动数据库”,不要先“调整大页-->启动数据库”,否则可能导致中间数据库使用普通内存,系统又使用大页,导致内存不够用。

设置步骤:

2.1 修改数据库参数,主要是不使用memory_target参数

alter system set memory_target = 0 scope = spfile;

alter system set use_large_page = only scope = spfile;   #这个参数最好不要设置,否则如果大页配置不够用,数据库就起不来了,使用默认值true即可

下面的参数根据实际情况配置

alter system set sga_max_size=60G scope=spfile;

alter system set sga_target=0 scope=spfile;

alter system set pga_aggregate_target=10240M scope=spfile;

alter system set shared_pool_size=12G scope=spfile;

alter system set db_cache_size=36G scope=spfile;

alter system set large_pool_size=3G scope=spfile;

 2.2 停库

sqlplus / as sysdba

shutdown immediate

 2.3 检查/proc/meminfo, 确认系统支持HugePage

cat /proc/meminfo | grep HugePage

HugePage_Total:   0

HugePage_Free:    0

HugePage_Rsvd:   0

Hugepagesize:      2048 kB

2.4 计划要设置的内存大页数量

计算公式为:sga(MB)/2M + 100   #其实比 sga(MB)/2M 大几十或100都行

如:假如 SGA = 215G,那么内存页 = 215*1024/2 + 100 = 110180

vi /etc/sysctl.conf

vm.nr_hugepages = 110180

让设置生效,执行

 sysctl -p

2.5 在limits.conf中设置 oracle用户和 grid 用户可以锁定的内存大小,以KB为单位

确认memlock参数配置

ulimit -a | grep "max locked memory"   #如果设置的过小需要按照下面的配置进行修改

vi /etc/security/limits.conf

oracle soft memlock 41947136

oracle hard memlock 41947136

grid soft memlock 41947136

grid hard memlock 41947136

或者不设限

oracle soft memlock -1

oracle hard memlock -1

grid soft memlock -1

grid hard memlock -1

然后用oracle用户和grid用户连接到数据库服务器,使用 ulimit -a 参数查看是否生效

2.6  启动数据库

sqlplus / as sysdba

startup

2.7 检查大页是否生效

a.  检查/proc/meminfo 中HugePages_Free是否已经减少,如果已经减少,表明已经使用到HugePage Memory

b. 检查数据库实例启动日志如下标红部分是否为100%, 为100%,表明已经使用HugePage Memory.

Starting ORACLE instance (normal)

*********************************** Large Pages Information *****************************************

Per process system memlock (soft) limit = 64KB

Total Shared Global Region in Large Pages = KB (100%)

2.8 设置其他节点

按照上面的操作,分别配置其他节点的hugepage.

------Learning records ------the end------
最后修改时间:2023-10-10 19:20:53
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论