拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. 技术学习系列
  3. LG-ORACLE
  4. 正文

Oracle——使用HugePages优化内存性能

2023年1月31日 1246点热度 0人点赞 0条评论

目录

  • 一、引子
  • 二、HugePages简介
    • 1、相关概念
    • 2、使用HugePages的意义
      • (1)HugePages会在系统启动时,直接分配并保留对应大小的内存区域。
      • (2)HugePages在开机之后,如果没有管理员的介入,是不会释放和改变的。
      • (3)没有swap。
      • (4)大大提高了CPU cache中存放的page table所覆盖的内存大小,从而提高了TLB命中率。
      • (5)减轻page table的负载。
      • (6)提高内存的性能,降低CPU负载,原理同上
    • 3、使用HugePages需要注意的地方
      • (1)Hugepages是在分配后就会预留出来的,大小定要比服务器上所有实例的SGA总和要大,差一点都不行。
      • (2)其他进程无法使用Hugepages的内存,所以不要设置太大,稍稍比SGA大- -点保证SGA可以使用到hugepages就好了。
      • (3)在meminfo中和Hugepage相关的有四项:
      • (4) HugePages和oracle AMM (自动内存管理) 是互斥的
  • 三、配置HugePages
    • 1、修改内核参数memlock
    • 2、验证memlock limit
    • 3、禁用AMM
      • (1)关闭数据库实例
      • (2)创建pfile
      • (3)编辑pfile
      • (4)创建spfile
      • (5)修改系统参数kernel.shmall
      • (6)启动数据库实例
    • 4、计算需要使用的hugepage页面大小
    • 5、修改vm.nr_ hugepages参数
    • 6、停止数据库实例,重启操作系统
    • 7、检查设置是否生效

一、引子

系统进程是通过虚拟地址访问内存,但是CPU必须把它转换程物理内存地址才能真正访问内
存。为为提高这个转换效率,CPU会缓存最 近的虚拟内存地址和物理内存地址的映射关系,并
保存在一个由CPU维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量
多的映射关系。
而在Linux中,内存都是以页的形式划分的,默认情况下每项是4K,这就意味着如果物理内存
很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减
少映射表的条目,可采取的办法只有增加页的尺寸。

二、HugePages简介

1、相关概念

HugePages是在Linux2.6内核被引入的,主要提供4k的page和比较大的page的选择。

2、使用HugePages的意义

HugePages是Linux内核的一个特性,使用hugepage可以用更 大的内存页来取代传统的4K页面。使用HugePage主要带来以下好处:

(1)HugePages会在系统启动时,直接分配并保留对应大小的内存区域。

(2)HugePages在开机之后,如果没有管理员的介入,是不会释放和改变的。

(3)没有swap。

Notswappable: HugePages are not swappable. Therefore thereis no page-in/page-outmechanism overhead.HugePages are universally regarded aspinned.

(4)大大提高了CPU cache中存放的page table所覆盖的内存大小,从而提高了TLB命中率。

进程的虚拟内存地址段先连接到page table然后再连接到物理内存。所以在访问内存时需要先访问page tables得到虚拟内存和物理内存的映射关系,然后再访问物理内存。

CPU cache中有一部分TLB用来存放部分page table以提高这种转换的速度。因为page size大了,所以同样大小的TLB,所覆盖的内存大小也变大了。提高了TLB命中率,也提高了地址转换的速度。

(5)减轻page table的负载。

进行XX系统性能测试时,如果没有使用HugePages,数据库服务器上的pagetable大小大约为5G (这应该也是导致性能测试时数据库服务器内存不足的主要原因) :

node74:/home/Oracle # cat /proc/meminfo
MemTotal:
16323732 kB
PageTables:
5442384kB

配置了HugePages后,pagetable大小仅为 124M (性能测试时内存使用率稳定在80%左右) :

node74:/home/oracle # cat /proc/meminfo
MemTotal:
16323732 kB
PageTables:
127384 kB

Eliminated page tablelookup overhead:因为hugepage是不swappable的,所有就没有page table lookups。

Faster overall memory performance:由于虚拟内存需要两步操作才能实际对应到物理内存地址,因此更少的pages,减轻了page table访问热度,避免了page table热点瓶颈问题。

(6)提高内存的性能,降低CPU负载,原理同上

3、使用HugePages需要注意的地方

(1)Hugepages是在分配后就会预留出来的,大小定要比服务器上所有实例的SGA总和要大,差一点都不行。

比如说Hugepages设置为8G, oracle SGA为9G,那么oracle在启动的时候就不会使用到这8G的Hugepages。这8G就浪费了。所以在设置Hugepages时要计算SGA的大小,后面会给出一个脚本来计算。

(2)其他进程无法使用Hugepages的内存,所以不要设置太大,稍稍比SGA大- -点保证SGA可以使用到hugepages就好了。

(3)在meminfo中和Hugepage相关的有四项:

HugePages_Total: 4611
HugePages_Free: 474
HugePages_Rsvd: 467
Hugepagesize:   2048 kB
HugePages_Total为所分配的页面数目,和Hugepagesize相乘后得到所分配的内存大小。4611*2/1024大约为9GB

HugePages_Free为从来没有被使用过的Hugepages数目。即使oraclesga已经分配了这部分内存,但是如果没有实际写入,那么看到的还是Free的。这是很容易误解的地方。

HugePages_Rsvd为已经被分配预留但是还没有使用的page数目。在Oracle刚刚启动时,大部分内存应该都是Reserved并且Free的,随着oracle SGA的使用,Reserved和Free都会不断的降低。

HugePages_ Free-HugePages_ Rsvd这部分是没有被使用到的内存,如果没有其他的oracle instance,这部分内存也许永远都不会被使用到,也就是被浪费了。

(4) HugePages和oracle AMM (自动内存管理) 是互斥的

所以使用HugePages必须设置内存参数MEMORY_ TARGET / MEMORY_ MAX_ TARGET为0。

三、配置HugePages

1、修改内核参数memlock

修改内核参数memlock,单位是KB,如果内存是16G, memlock的大小要稍微小于物理内存。

计划lock 12GB的内存大小。

参数设置为大于SGA是没有坏处的。

以root用户登录两台数据库服务器,编辑limits.conf文件:

node74:~ # vi /etc/security/limits.conf

增加以下两行内容:

* soft memlock 12582912
* hard memlock 12582912

2、验证memlock limit

重新登录root和oracle用户,检查mem lock limit

node74:~ # ulimit -l
12582912
oracle@node74:~> ulimit -l
12582912

3、禁用AMM

如果使用11G及以后的版本,AMM已经默认开启,但是AMM与Hugepages是不兼容的,必须先disable AMM。禁用AMM的步骤如下:

(1)关闭数据库实例

已oracle用户登录两台数据库服务器,通过sqlplus关闭2个数据库实例。
oracle@node74:~> sqlplus / as sysdba
SQL> shutdown immediate

(2)创建pfile

以oracle用户登录其中一台主机, 执行以下命令创建pile:

oracle@node74:~> sqlplus / as sysdba
SQL> create pfile= '/home/oracle/pfile.ora'
fromspfile=' +DG_ ORA/orcl/spfileorcl.ora' ;

(3)编辑pfile

编辑pfile,删除memory_ max _target和memory_ target参数:

oracle@node74:~> vi /home/oracle/pfile.ora

删除下面几行:

orcl1.memory_ max_ target=11114905600
orcl2.memory_ max_ _target= 1114905600
*.memory_ max_ _target=0
orcl1.memory_ target=11114905600
orcl2.memory_ target= 11114905600
*.memory_ _target=0

修改后保存文件。

(4)创建spfile

执行以下命令创建spfile:

oracle@node74:~> sqlplus / as sysdba
SQL> create spfile=' +DG ORA/orcl/spfileorcl.ora'from pfile= /home/oracle/pfile.ora";

(5)修改系统参数kernel.shmall

Kernel.shmall是系统一次可以使用的最大共享内存大小。单位是page (4KB) 。禁用AMM后,需要修改系统参数kernel.shmall,该参数设置过小的话,可能会导致数据库启动失败ORA-27102 (详见附录4.2)。

ORACL E建议将其设置为系统中所有数据库实例的SGA总和。

例如SGA总和为9GB,则需要设置kernel.shmall=9* 1024*1024/4=2359296.

以root用户登录两台数据库服务器,编辑sysctl.conf文件。

node74:~ # vi /etc/sysctl.conf

修改kernel.shmall参数:

kernel.shmall = 2359296

执行sysctl -p使配置生效:

node74:~ # sysctl -p

(6)启动数据库实例

以oracle用户登录两台数据库服务器,通过sqlplus启动2个数据库实例。

oracle@node74:~> sqlplus / as sysdba
SQL> startup

4、计算需要使用的hugepage页面大小

确保全部实例都已经启动(包括ASM),然后以root用户运行hugepages_ settings.sh (脚本内容见附录4.1)去评估需要设置的Hugepages的大小。

node74:/home/oracle # ./hugepages. settings.sh
This script is provided by Doc ID 401749.1 from MyOracle Support
(http://supportoracle.com) where it is intended tocompute values for
the recommended HugePages/HugeTLB configuration forthe current shared
memory segments. Before proceeding with the executionplease make sure
that:
* OracleDatabase instance(s) are up and running
* OracleDatabase 11g Automatic Memory Management (AMM) is not setup(See Doc ID749851.1)
* The sharedmemory segments can be listed by command:
# ipcs -m
Press Enter toproceed...

----直接按Enter键

Recommended setting: vm.nr_ hugepages = 4611

也可以手工计算:

nr_ hugepages> =SGA _Target/Hugepagesize
=9G*1024M/2M
=4608

取一个比4608稍大的值即可。

5、修改vm.nr_ hugepages参数

以root用户登录两台数据库服务器,编辑/etc/sysctl.conf:
node74:~ # vi /etc/sysctl.conf

修改vm.nr_ hugepages参数为上一步中计算出来的值:

vm.nr_ hugepages = 4611

执行sysctl -p使配置生效:

node74:~ # sysctl -p

6、停止数据库实例,重启操作系统

停止所有数据库实例,重启操作系统。(理论 上不需要重启操作系统,建议重启)

7、检查设置是否生效

系统重启后,启动全部的数据库,通过以下命令检查配置是否生效:
node74:~ # grep HugePages /proc/meminfo
HugePages_ Total: 4611
HugePages_ Free: 2394
HugePages_ Rsvd: 2387
HugePages_ Surp:0

HugePages_ Free< HugePages. Total则说明Hugepages已经生效,同时HugePages. Rsvd 不为0。

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年11月10日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号