oracle如何使用大页、修改大页的方法

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

一、大页的概念

在 Linux 中,物理内存是以页为单位来管理的。默认的,页的大小为 4KB。同时,在 Linux 操作系统上运行内存需求量较大的应用程序时,采用的默认的 4KB 页面,将会产生较多 TLB Miss 和缺页中断,从而大大影响应用程序的性能。当操作系统以 2MB 甚至更大作为分页的单位时,将会大大减少 TLB Miss 和缺页中断的数量,显著提高应用程序的性能。
自 Linux Kernel 2.6 起,引入了 Huge pages(巨型页)的概念,目的是通过使用大页内存来取代传统的 4KB 内存页面, 以适应越来越大的内存空间。Huge pages 有 2MB 和 1GB 两种规格,2MB 大小(默认)适合用于 GB 级别的内存,而 1GB 大小适合用于 TB 级别的内存。
  • 查看页大小
[root@mesdb80 ~]# getconf PAGE_SIZE
4096

二、修改方法

2.1 查看Linux内存限制

  • Linux操作系统对每一个任务在物理内存中能够锁住的最大值做了限制!
#使用“ulimit -a”命令获得“max locked memory”的默认大小
ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 266239
#max locked memory       (kbytes, -l) 32   #限制为32kbytes
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2.2 修改Linux内存限制

vi /etc/security/limits.conf
oracle soft memlock -1
oracle hard memlock -1

su - oracle
ulimit -l
unlimited

2.3 修改sysctl.conf

  • 如果物理内存没有增加或减少则不需要操作
#SHMMAX 限制是 Linux 系统上共享内存段的最大大小。SHMALL 限制是系统上共享内存页的最大分配。
vim /etc/sysctl.conf

#该参数控制可以使用的共享内存的总页数。 Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。
kernel.shmall = nGB * 1024 * 1024 / 4 

#官方建议值:物理内存值 -1 byte ,一般取值大于 SGA_MAX_SIZE 即可,可以取物理内存 -1 byte 。
kernel.shmmax = nGB*1024*1024*1024-1

2.4 修改数据库参数

#备份SPFILE
create pfile='/home/oracle/init1028B.ora'  from spfile;

#如果有AMM则需要关闭,AMM与大页不兼容
alter system set memory_max_target= 0 sid=<ORACLE_SID>  scope=spfile;
alter system set memory_target= 0 sid=<ORACLE_SID>  scope=spfile;

#如果需要修改SGA和PGA则如下修改
alter system set sga_max_size=xxxxxG sid=<ORACLE_SID>  scope=spfile;
alter system set sga_target=xxxxxG sid=<ORACLE_SID>  scope=spfile;
alter system set shared_pool_size =xxxxxG sid=<ORACLE_SID>  scope=spfile;
alter system set db_cache_size= xxxxxG sid=<ORACLE_SID>  scope=spfile;
alter system set pga_aggregate_target = xxxxxG sid = <ORACLE_SID> scope=spfile;

#lock_sga和pre_page_sga为可选配置参数

#当lock_sga参数设置为TRUE时(默认值是FALSE),可以保证整个SGA被锁定在物理内存中,这样可以防止SGA被换出到虚拟内存。只要设置lock_sga为“TRUE”便可保证SGA被锁定在物理内存中
alter system set lock_sga=true scope=spfile;
#pre_page_sga参数也设置为“TRUE”,是因为这样可以保证在启动数据库时把整个SGA读入到物理内存中,此参数会增加系统的启动时间
alter system set pre_page_sga=true scope=spfile;

#修改后再次备份SPFILE
create pfile='/home/oracle/init1028A.ora' from spfile;

2.6 关闭数据库

shutdown immediate;

2.7 配置大页

vim /etc/sysctl.conf
vm.nr_hugepages=SGA_MAX_SIZE_GB * 1024 / 2 

#生效
sysctl -p

2.8 启动数据库

#没有开AMM的情况可以直接启动
startup;
#如果有开启AMM则需要去掉一些参数
vim /home/oracle/init.ora
去掉
*.memory_max_target=0
*.memory_target=0
<SID>.memory_target=0
#启动数据库
startup pfile = '/home/oracle/init.ora';
create spfile from memory;

请添加图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老苏畅谈运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值