1.  Hugepage基本概念 
    系统进程是通过虚拟地址访问内存,但是CPU必须把它转换成物理内存地址才能真正访问内存。
为了提高这个转换效率,CPU会缓存最近的“虚拟内存地址和物理内存地址”的映射关系,并保存在
一个由CPU维护的映射表(page table)中。
    page table(页表)是操作系统上的虚拟内存系统的数据结构模型,用于存储虚拟地址与物理地
址的对应关系。当我们访问内存时,首先访问"page table",然后Linux再通过"page table"的mapping
来访问真实物理内存(RAM或SWAP).
    在32位系统下,一个进程访问1GB的内存,会产生1M的页表,如果是在64位系统,将会增大到2M。
很容易推算,如果一个SGA设置为60G,有1500个ORACLE用户进程,64位LINUX的系统上,最大的页表
占用内存为:60*2*1500/1024=175G 。

为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。而在Redhat Linux中,
内存都是以页(Page)的形式划分的,默认情况下每页是4K Bytes,这就意味着如果物理内存很大,比
如64G ,则映射表的条目将会非常多,这将会影响CPU的检索效率(CPU需要转化虚拟地址为物理地址)。
而且根据上面的推算,页表会占用比物理内存还多的内存大小。
   因内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。这种增大的内
存页尺寸在Linux 2.1中,称为Big page;在AS 3/4或后续版本中,称为Hugepage。如果系统有大量
的物理内存(大于8G),则无论32位的操作系统还是64位的,都应该使用Hugepage。

2.  Hugepage基本信息查看 
   Linux中,可以通过如下命令来查看HugePage相关的值:
$ cat /proc/meminfo | grep Huge
HugePages_Total:   0
HugePages_Free:    0
HugePages_Rsvd:    0
Hugepagesize:     2048 KB
  通常情况下,Linux hugepage大小为2MB (不同的处理器架构,可能不一样)
HugePages_Total: Hugepage的页面数量
HugePages_Free:  剩余的页面数量
HugePages_Rsvd:  被分配预留但是还没有使用的page数目
Hugepagesize:    每单位数量大小
注意:  使用Hugepage内存是共享内存,它会一直pin在内存中,不会被交换出去,也就是说使用
hugepage的内存不能被其他的进程使用,所以一定要合理设置这个值,避免造成浪费。对于只使用
Oracle的服务器来说,把Hugepage_pool设置成稍大于SGA大小即可。PGA因不是共享内存,是使用
不到Hugepage的。 
    HugePages_Free - HugePages_Rsvd部分的内存是浪费的,且不能被其他程序使用。在实际应用中,
尽可能让HugePages_Free - HugePages_Rsvd=0
    设置了多少的huge page,free内存就会被使用多少。比如:设置sysctl vm.nr_hugepages=1024
之后, free命令可以看到free的内存会减少2048MB (1024*2M)。(这也和Hugepagesize的大小有关)
 
3.  Hugepage的好处:
a.  大大提高了CPU cache中存放的page table所覆盖的内存大小,从而提高了TLB命中率。
b.  CPU cache中有一部分TLB(Translation Lookaside Buffer)用来存放部分page table以提高虚拟内存
地址到物理内存地址转换的速度。因为page size变大了,所以同样大小的TLB,所覆盖的内存大小也变大了。
提高了TBL命中率,也就是提高了地址转换的速度。
c. 减少CPU的sys的使用。由于提高了CPU的TLB的命中率,也就降低了CPU的sys部分的使用。
d. 大页会将SGA LOCK在RAM里, 当内存短缺的时候也不会被page out

4. 如何配置Hugepages 
   根据下面的步骤来配置Hugepages,修改Hugepages需要重启机器。   
1). 需要在/etc/security/limits.conf 中设置memlock值(单位KB),该值小于内存大小,
例如你的内存大小是64G,有可以设置以下的值:  
*   soft   memlock    60397977 
*   hard   memlock    60397977
这个值大于SGA需求并没有什么害处。
 
如果是Exadata机器,参数要求请参考文档1284261.1
2). 重新登录root和oracle用户,检查memlock limit
$ ulimit -l 
60397977 
3). 如果你使用11G及以后的版本,AMM(自动内存管理)已经默认开启,但是AMM与Hugepages
是不兼容的(因为hugepage是共享内存,不适合PGA),必须先关闭AMM。
4). 确保你的全部实例都已经启动(包括ASM) ,然后根据Document 401749.1 的hugepages_settings.sh
去评估需要设置的Hugepages的大小。  
$ ./hugepages_settings.sh 
... 
Recommended setting: vm.nr_hugepages = 1496
注:也可以自己计算需要的Hugepages大小,其实就是Hugepages size> all of the SGA size
5).  编辑/etc/sysctl.conf 设置 vm.nr_hugepages参数:
vm.nr_hugepages = 1496 
 
6).  停止实例并重启OS系统 
7).  检查设置是否生效 
系统重启后,启动全部的数据库,通过以下命令检查
 
# grep HugePages /proc/meminfo 
HugePages_Total:    1496 
HugePages_Free:      485 
HugePages_Rsvd:      446 
HugePages_Surp:        0
 
HugePages_Free< HugePages_Total 既说明Hugepages已经生效,同时HugePages_Rsvd不为“0”.

5.  如何控制数据库SGA是否使用Hugepages?
 
  11.2.0.2之前的版本,DB的SGA只能选择全部使用hugepages或者完全不使用hugepages。
 
  11.2.0.2 及以后的版本, oracle增加了一个新的参数“USE_LARGE_PAGES”来管理数据库如何使用 hugepages.
  在11.2.0.3的时候,USE_LARGE_PAGES这个参数让Oracle的行为更加灵活。如果出现HugePage分配不足的情况,
SGA是可以使用那些small pages的。这就保证了极端情况下数据库是可以正常运行的。
 
USE_LARGE_PAGES参数有三个值: "true" (default), "only", "false" and "auto"(since 11.2.0.3 patchset).
 
a). 现在默认值是"true",如果系统设置Hugepages的话,SGA会优先使用hugepages,有多少用多少。 
11.2.0.2 如果没有足够的 hugepages, SGA是不会使用hugepages的. 这会导致ORA-4030错误,因为hugepages已
经从物理内存分配,但是SGA没有使用它,却使用其他部分内存,导致内存资源不足。  但是在11.2.0.3版本这个
使用策略被改变了,SGA可以一部分使用hugepages,剩余部分使用small pages。这样,SGA会有限使用hugepages,
在hugepages用完之后,再使用regular sized pages。
 
b). 如果设置为"false" , SGA就不会使用hugepages
 
c). 如果设置为 "only" 如果hugepages大小不够的话,数据库实例是无法启动的 (防止内存溢出的情况发生).
 
d). 11.2.0.3版本之后,可以设置为 "auto".这个选项会触发oradism进程重新配置linux内核,以增加hugepages
的数量。

参考 : 
http://hsbxxl.blog.51cto.com/181620/1075166
http://blog.csdn.net/herecles/article/details/16861743
http://oracle.codemach.com/zai-linux-xia-wei-oracle-kai-qi-da-ye-hugepage.html
http://blog.itpub.net/17203031/viewspace-775004

 

Linux Hugepage ,AMM及 USE_LARGE_PAGES for oracle 11G(转载)的更多相关文章

  1. 怎样一步一步删除(linux &amp; UNIX)环境下 oracle 11g 集群节点

     Deleting a Cluster Node on Linux and UNIX Systems 1.确定要删除的节点,是否active,pinned $ olsnodes -s -t 假设 ...

  2. linux 6.4平台利用rman迁移oracle 11g r2数据库

    测试环境分别在虚拟机安装A,B主机 系统:linux 6.4, 数据库:oracle 11g r2 A主机:安装oracle 11g r2数据库 B主机:只安装oracle 11g r2软件 第一步, ...

  3. centos 安装oracle 11g r2(一)-----软件安装

    centos 安装oracle 11g r2(一)-----软件安装 1.进入管理员权限 [anzerong@localhost ~]# su - root password [root@localh ...

  4. Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)

    在之前的文章(http://space.itpub.net/17203031/viewspace-774843)中,笔者介绍了如何在Linux 2.6内核中配置HugePage以及AMM与其的不兼容性 ...

  5. Oracle 11g AMM与ASMM切换

    现在的Oracle正在往智能化方向发展.如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题.但是进入10g之后,自动内存池调节成为一个重要Oracl ...

  6. 在 Oracle Linux 6.5 上安装 Oracle 11g 单实例数据库

    Checking the Hardware Requirements 系统必须满足下面最小的硬件要求 Memory Requirements Minimum: 1 GB of RAMRecommend ...

  7. Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考

    操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...

  8. linux下安装 oracle 11g

    oracle 11g安装 一.环境准备 划分区 / 15000M /tmp 4096M /boot 100M Swap 4096M /u01 剩余空间 2.更改主机名,ip地址 3.安装软件包 那么l ...

  9. Oracle 11g客户端在Linux系统上的配置步骤详解

    Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...

随机推荐

  1. ZooKeeper伪分布集群安装及使用 RMI+ZooKeeper实现远程调用框架

    使用 RMI + ZooKeeper 实现远程调用框架,包括ZooKeeper伪集群安装和代码实现两部分.  一.ZooKeeper伪集群安装: 1>获取ZooKeeper安装包 下载地址:ht ...

  2. Oracle RAC环境的日志体系

    转摘:http://blog.itpub.net/22664653/viewspace-722463/ 在Oracle RAC环境中比单个系统的日志体系要复杂:见下图: 简单介绍一下有关Oracle集 ...

  3. [nginx]Nginx禁止访问robots.txt防泄漏web目录

    关于robots.txt文件:搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信 息.您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网 ...

  4. nginx服务器应用中遇到的两个问题

    1>首先是413的错误! client_max_body_size Context: http, server, location It is the maximum size of a cli ...

  5. 给Jquery动态添加的元素添加事件2

    $('div').on('click', 'button', function(e){console.log($(e.target).is(':button'))}); $('<button&g ...

  6. HackerRank "Poisonous Plants"

    I had the same BFS idea as one of the AC code this: because dying pattern is spead from the initial ...

  7. lucene之排序、设置权重、优化、分布式搜索(转)

    lucene之排序.设置权重.优化.分布式搜索(转) 1. 基本应用 using System;using System.Collections.Generic;using System.Text;u ...

  8. 剑指offer系列26--正则表达式匹配

    [题目]请实现一个函数用来匹配包括’.’和’*‘的正则表达式.模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例 ...

  9. bootstrap的datetimepicker只选择月份

    本文转载自:http://blog.csdn.net/feng1603/article/details/41869523 直接上代码: //选择年月日的 startView: 2, minView: ...

  10. php正则替换所有空格和换行

    替换所有空格为空 $contents=" abc "; $contents=preg_replace('/\s+/','',$contents); //结果$contents=&q ...