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;

更多推荐


所有评论(0)