HugePages -- 介绍及配置

  • Why Do You Need HugePages ?


HugePages 属于Linux操作系统内核。配置了大页,那个系统将在“大页”和“小页”之间进行二选一。(默认读取数据为4KB)。 详细介绍参见: Document 361323.1


如果你有很大的内存或者SGA,那个配置大页将会是Oracle数据库性能调优的重要系统参数(比如大于8GB),那么你将需要配置HugePages,以下为配置SGA大小的注意事项,HugePages的建议:


- 更大的Pagesize & 更少的页面 (Larger Page Size and Less # of Pages):默认的page大小为4k,然而HugeTLB(HugeTables)大小为2048K。那么意味着操作系统需要至少处理512次page


- 减少页面的游走 (Reduced Page Table Walking):自从一个HugePages 覆盖一个较大的、连续的虚拟地址范围,而不是常规大小的页面,因此每个TLB条目的TLB命中率要比普通页面高。这减少了从虚拟地址获取物理地址的次数。


- 减少内存使用 (Less memory usage):从Oracle DB的观点出发。使用HugePages Linux内核参数,将会减少内存在创建pagetable时 提供虚拟物理内存映射给SGA地址的范围的 使用情况。


- 避免交换页 (No Swapping): 我们必须避免swapping 在Linux系统上的发生。HugePages是不可被swap的。(常规的pages是可以被交换的),所以这也没有page的替代机制,Hugepages被普遍的看做是一个解决方法。


- 没有 'kswapd' 操作(No 'kswapd' Operations) :如果有很大的区域被paged,那么kswapd将会非常繁忙。


  • How to configure

Step 1

set in /etc/security/limits.conf.

设置memlock参数,此值稍小于内存即可。
例: 64GB内存
*   soft   memlock    60397977
*   hard   memlock    60397977
* 将这个值设置为大于您的SGA要求是没有害处的。


Step 2

Re-logon to the Oracle product owner account (e.g. 'oracle') and check the memlock limit

$ ulimit -l
60397977

Step 3

如果你的数据库版本为 Oracle 11g 及以上版本开启了AMM特性,那么该特性与HugePages冲突。

则需要disable AMM特性。设置初始化参数 MEMORY_TARGET and MEMORY_MAX_TARGET to 0 (zero)

* 从11.2.0.3开始,如果DBCA检测到机器有超过4GB的RAM,那么AMM将不再被默认配置。



Step 4

确保数据库实例启动,使用hugepages_setting.sh脚本,计算 vm.nr_hugepageskernel 参数建议值。Document 401749.1 

$ ./hugepages_settings.sh
...
Recommended setting: vm.nr_hugepages = 1496
$
可参考我的博文: HugePages -- 配置计算脚本

Step 5

设置 /etc/sysctl.conf ,需从起生效。

vm.nr_hugepages = 1496



Step 6

stop all database instance & reboot server




Step 7: 

检查是否配置已生效 /proc/meminfo

# grep HugePages /proc/meminfo
HugePages_Total:    1496
HugePages_Free:      485
HugePages_Rsvd:      446
HugePages_Surp:        0


发布了24 篇原创文章 · 获赞 0 · 访问量 4497

猜你喜欢

转载自blog.csdn.net/strawberry1019/article/details/79696239