Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >关于hugepage

关于hugepage

原创
作者头像
laosu
修改于 2021-03-14 09:16:44
修改于 2021-03-14 09:16:44
69200
代码可运行
举报
文章被收录于专栏:db小强db小强
运行总次数:0
代码可运行
介绍

HugePages是Linux内核2.6+集成的一个功能,可以允许管理大于4KB的页。

相关概念

  • Page Table:页表是操作系统存储的虚拟地址和物理地址的映射的数据结构.
  • TLB: A Translation Lookaside Buffer (TLB),是CPU的一个固定大小的buffer,缓存了部分内存页表,可以更快进行虚拟地址转换。
  • hugetlb: 是TLB中指向HugePage的入口,通常等同于HugePage
  • hugetlbfs: 是2.6内核中新的像tmpfs的内存文件系统
为什么需要

如果你使用大内存及大的SGA,那HugePages是加快数据库性能的重要因素,优点如下:

  • 页变大页数变少: 默认页是4K,而HugePageTLB是2048K,意味着页数少512倍
  • 减少页表 Walking
  • 更少的内存操作成本
  • 更少的内存使用
  • 没有内存交换
  • 没有 'kswapd' 操作:正常页kswapd 会占用大量CPU资源(i.e. 13 million page table     entries for 50GB memory). 而使用HugePages,则不需要。
如何配置

Step 1: vi/etc/security/limits.conf   单位KB,设置比SGA大没问题。使用oracle-validated包和exadata默认会被设置。也可以在etc/security/limits.d/  目录下设置。

*  soft   memlock    60397977 *   hard   memlock    60397977

Step 2: 重新登陆oracle,check

$ ulimit -l 60397977

Step 3: AMM同hugepages不兼容,需先禁用(11.2.0.3+默认不配置AMM),不然会有如下报错:

ORA-00845:MEMORY_TARGET not supported on this system

Step4: 开启数据库实例,包括ASM,使用如下脚本计算vm.nr_hugepages:

$ ./hugepages_settings.sh ... Recommended setting: vm.nr_hugepages = 1496 $

Step 5: vi /etc/sysctl.conf  设置 vm.nr_hugepages,sysctl -p:

... vm.nr_hugepages = 1496 ...

Step6: 停实例,重启server(最佳实践建议重启)系统重启后,启动实例,检查是否生效, HugePages_Free value应该小于HugePages_Total:

# grep HugePages/proc/meminfo HugePages_Total:    1496 HugePages_Free:      485 HugePages_Rsvd:      446 HugePages_Surp:        0

如果所有oracle实例PRE_PAGE_SGA参数是false,参数HugePages_Rsvd>0。12.1之前该参数默认false,12.1开始该参数默认为true

NOTES

HugePages配置基于内在和运行实例的SGA,如下变化需重新配置

  • OS总内存变化
  • 添加新实例
  • 实例SGA变化

如下情况需要评估HugePages配置是否合适:

  • 数据库性能很差
  • 系统OOM或过多swapping
  • 实例不能启动
  • 重要的服务失败

参考:mos 361468.1

附:hugepages_settings.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash## hugepages_settings.sh## Linux bash script to compute values for the# recommended HugePages/HugeTLB configuration## Note: This script does calculation for all shared memory# segments available when the script is run, no matter it# is an Oracle RDBMS shared memory segment or not.## This script is provided by Doc ID 401749.1 from My Oracle Support # http://support.oracle.com# Welcome textecho "This script is provided by Doc ID 401749.1 from My Oracle Support (http://support.oracle.com) where it is intended to compute values for the recommended HugePages/HugeTLB configuration for the current shared memory segments. Before proceeding with the execution please note following: * For ASM instance, it needs to configure ASMM instead of AMM. * The 'pga_aggregate_target' is outside the SGA and   you should accommodate this while calculating SGA size. * In case you changes the DB SGA size,   as the new SGA will not fit in the previous HugePages configuration,   it had better disable the whole HugePages,   start the DB with new SGA size and run the script again.And make sure that: * Oracle Database instance(s) are up and running * Oracle Database 11g Automatic Memory Management (AMM) is not setup   (See Doc ID 749851.1) * The shared memory segments can be listed by command:    # ipcs -mPress Enter to proceed..."read# Check for the kernel versionKERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`# Find out the HugePage sizeHPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`if [ -z "$HPG_SZ" ];then    echo "The hugepages may not be supported in the system where the script is being executed."    exit 1fi# Initialize the counterNUM_PG=0# Cumulative number of pages required to handle the running shared memory segmentsfor SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"`do    MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`    if [ $MIN_PG -gt 0 ]; then        NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`    fidoneRES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`# An SGA less than 100MB does not make sense# Bail out if that is the caseif [ $RES_BYTES -lt 100000000 ]; then    echo "***********"    echo "** ERROR **"    echo "***********"    echo "Sorry! There are not enough total of shared memory segments allocated for HugePages configuration. HugePages can only be used for shared memory segments that you can list by command:    # ipcs -mof a size that can match an Oracle Database SGA. Please make sure that: * Oracle Database instance is up and running  * Oracle Database 11g Automatic Memory Management (AMM) is not configured"    exit 1fi# Finish with resultscase $KERN in    '2.2') echo "Kernel version $KERN is not supported. Exiting." ;;    '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;          echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;    '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;esac# End

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux 下配置 HugePages
    HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。尤其是对于8GB以上的内存以及较大的Oracle SGA size,建议配值并使用HugePage特性。本文基于x86_64 Linux下来描述如何配值 HugePages。     有关HugePages的特性请参考:Linux HugePage 特性
Leshami
2018/08/14
4.5K0
Linux之HugePages快速配置
关于Linux系统的HugePages与Oracle数据库优化,可以参考熊爷之前的文章,相关概念介绍的非常清晰:
Alfred Zhao
2023/10/10
6720
Linux系统内存使用优化技巧
作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。
久绊A
2025/02/24
1720
Linux 透明大页 THP 和标准大页 HP
在 Linux 中大页分为两种: Huge pages (标准大页) 和 Transparent Huge pages(透明大页)。
JiekeXu之路
2022/05/17
3.3K0
Linux 透明大页 THP 和标准大页 HP
通过shell脚本得到数据库的基本信息(一)(r9笔记第89天)
今天写了个脚本,虽然实现的功能不多,但是个人感觉是一个好的开始,架子出来了,后面要补充的细节加进来就逐步完善了。 这个脚本的运行效果如下: OS Version is :[ RHEL_6.3 ] Oracle Version is :[ 11.2.0.3.0] Oracle Instance is :[ dgtest ] dgtest ORACLE_HOME is :[ /U01/app/oracle/product/11.2.0.2/db_1 ] Oracle status is
jeanron100
2018/03/19
9380
POSTGRESQL 设置hugepage 可以让系统使用内存更有效率,防止OOM
https://www.percona.com/blog/why-linux-hugepages-are-super-important-for-database-servers-a-case-with-postgresql/
AustinDatabases
2021/10/28
1K0
POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM
一条关于swap争用的报警邮件分析(二)(r8笔记第4天)
最近收到报警,某一个服务器的swap空间有些紧张,查看这台服务器上有两个备库数据库实例,当然负载还是很低的。但是目前来看,内存已经所剩无几,所以自然而然会用到swap,而且swap也看起来紧张了,从设计的角度来看,这种方式还是有很大的隐患,一旦需要切换,这台服务器还是很有可能出现oom-killer的情况,也就意味着宕机。所以从小从大来看这个报警都不能掉以轻心。 使用top查看的情况如下,可以看到swap已经很紧张了,剩余内存不到300M了。 top - 13:46:44 up 973 days, 3:0
jeanron100
2018/03/19
7480
Linux HugePage 特性
    HugePage,就是指的大页内存管理方式。与传统的4kb的普通页管理方式相比,HugePage为管理大内存(8GB以上)更为高效。本文描述了什么是HugePage,以及HugePage的一些特性。
Leshami
2018/08/14
1.2K0
Linux HugePage 特性
Linux中的HugePage对数据库服务来说为什么如此重要:以PG为例
用户经常因为OOM killer造成数据库崩溃问题来找我们寻求帮助。Out Of Memory killer会杀死PG进程,并且是我们遇到的数据库崩溃问题中首要原因。主机内存不足的原因可能有多种,最常见的有:
yzsDBA
2021/10/19
1.4K0
Linux中的HugePage对数据库服务来说为什么如此重要:以PG为例
Oracle自治数据库和自动化运维新特性与新进展
墨墨导读:数2020数据技术嘉年华于11月21日落下帷幕,大会历时两天,来自全国各地的数据领域学术精英、领袖人物、技术专家、从业者和技术爱好者相聚北京,见证了个人的快速成长、技术的迭代进步、行业的蓬勃发展、生态的融合共赢,以及市场的风云变迁。
数据和云
2020/12/18
1.1K0
一次把RMAN备份速度提高6倍的工作笔记
参考MOS的文档Doc ID 361468.1进行配置后,再次查询内存里的Hugepage如下:
姚远OracleACE
2023/04/06
5760
一次把RMAN备份速度提高6倍的工作笔记
技术分享 | 浅谈一下大页
Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages)。
爱可生开源社区
2023/02/13
1.2K0
AMM和ASMM切换
现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。
全栈程序员站长
2022/09/02
4270
Linux|大内存页(HugePage)的三三两两
最近有同事问了几个关于大内存页(HugePage)的问题,就顺便复习并拓展的看了下相关的内容,根据自己的理解做个简单总结,如有纰漏欢迎指正。
琉璃康康
2022/04/19
3.7K0
Linux|大内存页(HugePage)的三三两两
性能优化:Linux环境下合理配置大内存页
熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 PC Server发展到今天,在性能方面有着长足的进步。64位的CPU在数年前都已经进入到寻常的家用PC之中,更别说是更高端的PC Server;在Intel和AMD两大处理器巨头的努力下,x86 CPU在处理能力上不断提升;同时随着制造工艺的发展,在PC Server上能够安装的内存容量也越来越大,现在随处可见数十G内存的PC Server。正是硬件的发展,使得PC Server的处理能力越来越强大,性能越来越高。而在稳定性
数据和云
2018/03/06
5.2K0
性能优化:Linux环境下合理配置大内存页
由hugepage设置导致的数据库事故(r4笔记第28天)
近期客户需要希望提高业务处理能力,在现有的系统中加入几台weblogic服务器,所以需要增加以下连接数的配置,但是同时他们想对现有系统的设置一些变更,发送了一个清单给我们。 大体的变更如下: Change Processes from 10000 to 18000 Change PGA from 10G to 20G Change Buffer Cache from 20G to 40G Change Shared pool from 10G to 20G HugePage from 60 GB t
jeanron100
2018/03/15
7520
Linux 标准大页和透明大页
Huge pages ( 标准大页 ) 和 Transparent Huge pages( 透明大页 )
用户1278550
2021/07/16
5.9K0
由一条日志警告所做的调优分析(r3笔记第40天)
这个案例发生有段时间了,但是今天无意中看到当时的邮件,感觉还是收益匪浅,看来还是细节决定成败啊。从一些日志或trace 文件中的警告信息中我们可以发掘出潜在的问题。 当时系统中的用户数很小,所以每天都能抽时间看看日志记录,看有没有明显的问题。结果在grep的时候发现trace文件中有一些警告记录。 当时的库是10gR2的库,现在已经升级到了11gR2. /xxxx/oracle/xxxxx/oradmp/udump/xxxxx01_ora_15070.trc Oracle Database 10g Ent
jeanron100
2018/03/14
1.1K0
VPP HugePages
以前经常遇到2C3G的vmware续集上环境上安装上vpp后,能直接运行,而每次当系统重启后总是报内存不足的问题。当把系统内存调整到4G后,就能正常运行了。一直也不清楚原因。最近工作中遇到一个问题在2c2g的环境上跑vpp,一段时间后,总是报内存不足。后来查询发现hugepage内存大小是1G,但是只使用了不到三分之一的大页内存。
dpdk-vpp源码解读
2023/03/07
1.6K4
VPP HugePages
一文读懂 HugePages(大内存页)的原理
在介绍 HugePages 之前,我们先来回顾一下 Linux 下 虚拟内存 与 物理内存 之间的关系。
用户7686797
2021/04/23
6.8K0
一文读懂 HugePages(大内存页)的原理
相关推荐
Linux 下配置 HugePages
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验