linux mysql 大页_LINUX下为ORACLE数据库设置大页--hugepage

在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage。

为什么 使用大页?

LINUX内存的默认块大小是4K

如果SGA为:128G

select 128*1024*1024/4 from dual;33554432个(三千多万),

select 128*1024/2 from dual; 65536个

每个内存页,有一个页表项(大概10个字节),记录页的状态、位置

默认块大小是4K时--页表大小:320M。

在大页下2M时,页表只占.625M

在Linux中,每个进程页表独立,有各自的页表。

如果有1000个进程:1000*320M大约是320G。

而1000个进程使用大页:1000*0.625=625M

设置了大页,但没被Oracle使用,原因只有两个:

(1)、SGA_MAX_SIZE超过了大页

(2)、没有设置内存锁

内存:是进程活动的舞台,ORACLE数据库在startup时会自动去查找是否设置有大页。

如有,在大页中分配SGA。

如没有,则正常使用默认数据块大小启动。

#############

设置大页步骤:

1.查看系统当前的大页使用情况:

[oracle@bys3 ~]$ cat /proc/meminfo |grep Huge

HugePages_Total: 0

HugePages_Free: 0

HugePages_Rsvd: 0

HugePages_Surp: 0

Hugepagesize:2048 kB--大页大小是2M

BYS@ bys3>show parameter sga_max --查看数据库SGA大小--我的实验机

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

sga_max_size big integer 216M

2. 设置大页的数量

--这里是200个*2M=400M,SGA最大216M,大页的内存要大于SGA大小,才能被ORACLE使用,所以我设置200个。

vi /etc/sysctl.conf

在里面增加一行:

vm.nr_hugepages=200

保存之后执行:

sysctl -p

查看: --如果HugePages_Free:未到200,多执行几次sysctl -p

[root@bys3 ~]# cat /proc/meminfo |grep Huge

HugePages_Total: 200

HugePages_Free: 200

HugePages_Rsvd: 0

HugePages_Surp: 0

Hugepagesize: 2048 kB

3.还需要设置内存锁:-- memlock数量要大于大页的数量--设置为-1,不限制。

vi /etc/security/limits.conf

oracle soft memlock -1

oracle hard memlock -1

[root@bys3 ~]# ulimit -l

3500000 -----这个数字就是针对大页数量的限制的,足够用。

4.重启数据库,大页已经被ORACLE用上了。

SYS@ bys3>shutdown immediate;

SYS@ bys3>startup

重启数据库过程中不断执行;cat /proc/meminfo |grep Huge,能看到HugePages_Free:的数量不断减少,说明大页正在被使用。

[root@bys3 ~]# cat /proc/meminfo |grep Huge

HugePages_Total: 200

HugePages_Free: 101

HugePages_Rsvd: 10

HugePages_Surp: 0

Hugepagesize: 2048 kB

========================================

MOS中明确的参数设置要求

alter system reset memory_target scope=spfile;

alter system reset memory_max_target scope=spfile;

如果dbca以非AMM方式建库会遇到ORA-32010: cannot find entry to delete in SPFILE,也就是说spfile本来就没有这两个参数,错误忽略即可。

MOS中原文

If you want to use HugePages make sure that both memory_target / memory_max_target initialization parameters are unset

unset代表spfile中不允许出现memory_target和memory_max_target(关于这一点,Oracle官方文档中的描述是错误的,而MOS中的一些描述才是正确的)。目前我们实施文档中的标准是设置memory_target,这样其实是没问题的。但是只要再设置memory_max_target就不行了,不管该参数设置为0还是非0,大页都不会生效。所以,正确的配置是memory_target和memory_max_target两个参数都不要出现在spfile中,即都reset掉。

额外设置的参数

alter system set use_large_pages=only scope=spfile;

强制大页生效,如果大页小于sga或者参数配置不符合大页配置规范,实例将无法启动,从根本上杜绝大页不生效的情况,以前确保sga 100%放到hugepage中只能通过vi去alert日志中搜索,这样也可以免除大家检查的复杂性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值