在Linux 64位系统下使用hugepage

首先,为什么要介绍/使用HugePage?

在步入正题之前,先讲一个非常普遍的数据库性能问题。

众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中存储了共享的SQL语句及执行计划,buffer pool中存储了数据块。对这些资源的访问,其实就是Oracle使用OSAPI来访问内存资源的过程。内存操作理应/通常意义上都是很快的,这时候Oracle数据库可以很正常的工作。

但是

a)如果SGA内的某一部分被swap到硬盘上,那么再次访问它,就需要花非常多的时间

b)如果OS本身的内存非常的大,那么管理/访问到我们需要的内存的过程就需要更长时间。

在这些情况下,我们往往会碰到诸如latch/mutex/library cache lock[pin]/row cache lock的问题.


LinuxHugePage 可以解决由以上两种问题引发的性能波动。

我们知道,在Linux 64位系统里面,默认内存是以4K的页面(Page)来管理的,当系统有非常多的内存的时候,管理这些内存的消耗就比较大;HugePage使用2M大小的页面来减小管理开销。HugePage管理的内存并不能被Swap,这就避免了swap引发的数据库性能问题。所以,如果您的系统经常碰到因为swap引发的性能问题的系统毫无疑问需要启用HugePage。另外,OS内存非常大的系统也需要启用HugePage。但是具体多大就一定需要使用HugePage?这并没有定论,有些文档曾经提到12G以上就推荐开启,我们强烈建议您在测试环境进行了充分的测试之后,再决定是否在生产环境应用HugePage

当然,任何事情都是有两面性的,HugePage也有些小缺点。第一个缺点是它需要额外配置,但是这完全是可以忽略的。另外, 如果使用了HugePage11g新特性 AMMAutomatic Memory Management)就不能使用了,但是ASMMAutomatic
Shared Memory Management
)仍然可以继续使用。

接下来,我们对配置HugePage需要完成的步骤进行介绍。以下步骤以RHEL5为例。

a) 设置memlock的限制,更改/etc/security/limits.conf加入下面的行

hugepage1.gif

注意上面的数字是以 K 为单位的,可以让它的值稍微比系统的物理内存小就可以了

b) 检查memlock是否生效,要使用oracle的用户执行下面的操作,如果没有生效尝试重新登陆系统

hugepage2.jpg

c) 如果使用11g数据库,确认参数MEMORY_TARGETMEMORY_MAX_TARGET已经设为0

d) 启动数据库,并运行Document
401749.1
提供的脚本来计算应该分配多少HugePage页面。例如:

hugepage3.jpg

e) 更改/etc/sysctl.conf,把上一步得到的值指定给vm.nr_hugepages参数

hugepage4.jpg

f) 重启数据库和OS

g) 验证HugePage是否已启用

如下图,HugePage一共分配了1496个页面,其中有6个页面为Free,那么使用了1490个页面,每个页面为2048K.

hugepage5.jpg


最后,如果您想了解更多的和HugePage相关的问题,请参考以下的note

Note 361323.1 : HugePages on Linux: What It
Is... and What It Is Not...

Note 361468.1 : HugePages on Oracle Linux
64-bit 

关于这个主题,如果有后续的问题欢迎pxboracle 微信讨论。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12798004/viewspace-2144017/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12798004/viewspace-2144017/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值