zoukankan      html  css  js  c++  java
  • Oracle12c ASMM和hugepage

         在Oracle 12c,测试发现默认并不启用AMM 特性,而是使用了ASMM。因为在X86 架构下的linux 平台中,配置hugepage时,也是需要关闭AMM,使用ASMM特性。

         AMM分配内存的方式是在/dev/shm创文件的方式,每个文件大小为granule大小.这种方式和使用huge page的方式不兼容,所以使用huge page必须要禁掉amm.而使用asmm的方式,是使用传统的共享内存方式.
         在以前使用huge pages时,需要定义db_block_buffers来定义cache buffer使用huge page的数量.其他的内存组件是不能使用huge page的
         现在新增加一个参数,use_large_pages,默认为true,oracle数据库在启动时,先会使用在os层面定义好的huge page数量然后再加上其他的内存,比如现在sga_target=定义了1500M,vm.nr_hugepages=200(MB),会先使用huge page,
    再加上其他定义的1100M,这样就避免了只有db_block_buffers使用huge page的情况.
    [root@prod dbs]# cat /etc/sysctl.conf | grep vm
    vm.nr_hugepages=40
    [root@prod dbs]# cat /etc/security/limits.conf | grep memlock  --要大于hugepage的size
    #        - memlock - max locked-in-memory address space (KB)
    oracle soft memlock 5000000000
    oracle hard memlock 5000000000
    SQL> show parameter use_large_pages;
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    use_large_pages                      string      TRUE
    这样实例在启动时,会用光所有可用的hugepage,不足的部分再按正常的内存去分配.
    Wed Nov 13 04:01:36 2013
    ************************ Large Pages Information *******************
    Wed Nov 13 04:01:36 2013
    Per process system memlock (soft) limit = 4768 GB
    Wed Nov 13 04:01:36 2013

    Total System Global Area in large pages = 78 MB (9%)
    Wed Nov 13 04:01:36 2013

    Large pages used by this instance: 39 (78 MB)
    Wed Nov 13 04:01:36 2013
    Large pages unused system wide = 1 (2048 KB)
    Wed Nov 13 04:01:36 2013
    Large pages configured system wide = 40 (80 MB)
    Wed Nov 13 04:01:36 2013
    Large page size = 2048 KB
    Wed Nov 13 04:01:36 2013

    数据库服务器内存设置——设置大叶内存

    数据库服务器的操作系统内核启动大叶内存选项
    大叶是2M一个页,默认 是4k一个页
    如果数据库连接数很多,每个连接又要访问大量的数据,每个连接对应的进程都要在内存里分空间来存放它所要访问的内存地址映射表,如果这样的进程太多的话,可能会吃掉很多内存
    每1G内存所需要的映射表的大小是2.5M,用大叶内存的话只用不到1M

    $cat /etc/sysctl.conf | grep huge
    vm.nr_hugepages = 45000
    $cat /proc/meminfo | grep Huge
    HugePages_Total: 45000
    HugePages_Free: 6539
    HugePages_Rsvd: 4548
    HugePages_Surp: 0
    Hugepagesize: 2048 kB

    机器的连接数?
    [oracle@prod ~]$ ps -ef | grep oracle | grep "LOCAL=NO"|wc -l
    522
    大致估算一下,64位系统下,一个进程如果要在数据库中访问1G数据的话,需要在内存中分配2M的内存,32位的系统需要1M

    所以可以计算一下,522个会话,每个会话是一个进程,如果每个进程访问1G的数据的话,操作系统需要500*2, 大约是1G的内存来为这些进程创建映射表

    当前正在被使用的映射表占用的内存大小

    [oracle@prod ~]$ cat /proc/meminfo | grep PageTable
    PageTables: 6383288 kB

    当前操作系统内存用于存映射表的大小:6G。

    说明如果不开大叶内存的情况下,调整sga的话,至少需要给系统留出来这些内存,否则系统可能因为内存耗尽

    也就是我这个物理内存64G,不开大叶内存的情况下,至少留个系统6G多。

    按照计算,1个进程如果访问1G数据的话需要2M左右的内存做为映射表,这个机器上有522个会话,映射表总大小是6G,

    说明每个会话平均访问的数据量是5.8G左右

    所以调整sga的时候注意一下,记得给操作系统留出足够的内存

  • 相关阅读:
    容易忽视的运算符问题
    JAVA:数组,排序,查找<4>
    JAVA:类的三大特征,抽象类,接口,final关键字<3>
    JAVA:变量,数据类型,运算符,流程控制(简介)<1>
    JAVA:类,对象,成员属性,成员方法,构造方法,类变量,类方法<2>
    JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
    java静态代码块、初始化块和构造方法的执行顺序
    java面试题小全
    java中从1000万个随机数中查找出相同的10万个随机数花的最少时间
    Java数据类型总结
  • 原文地址:https://www.cnblogs.com/elontian/p/9519453.html
Copyright © 2011-2022 走看看