在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的时候注意一下,记得给操作系统留出足够的内存

Oracle12c ASMM和hugepage的更多相关文章

  1. 为Linux版本Oracle 11gR2配置HugePage

    HugePage是Oracle在Linux版本下一种性能优化手段.对于共享内存区域(SGA)的数据库系统,Oracle通常都推荐在操作系统层面配置上HugePage,为Oracle实例准备更大的可用共 ...

  2. Oracle 11g AMM与ASMM切换

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

  3. ORACLE ASMM与AMM的总结

      概念对比介绍 相信有些人会对ORACLE当中的AMM(Automatic Memory Management)与ASMM(Automatic Shared Memory Management)有些 ...

  4. 在Linux 64位系统下使用hugepage

    首先,为什么要介绍/使用HugePage? 在步入正题之前,先讲一个非常普遍的数据库性能问题. 众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中 ...

  5. 转 用好HugePage,告别Linux性能故障

    超过32G 的数据库,可以是使用如下方法配置. ######### Slow Performance with High CPU Usage on 64-bit Linux with Large SG ...

  6. Linux配置hugepage

    对于内存较大的Oracle数据库server,配置HugePage是非常有必要的,以下是配置Huge的步骤: 我的环境: OS:CentOS release 6.4 (Final) Oracle:11 ...

  7. Oracle内存管理方式由amm切换为asmm

    (一)ASMM和AMM 在Oracle 10g时,Orale推出ASMM(Automatic Shared Memory Managed),实现了SGA和PGA各自内部的自调节.在Oracle 11g ...

  8. Centos7安装Oracle12c

    环境: CentOS7@VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle12C企业版64位 过程纪要: root身份安装依赖包: compat-libstdc+ ...

  9. CentOs5.8下安装Oracle12C

    12C安装向导: http://docs.oracle.com/database/121/LTDQI/toc.htm 12C下载地址: http://www.oracle.com/technetwor ...

随机推荐

  1. .net 与directX

    微软早期出过managed assembly.但后来因为XXX的原因,没有继续出,只支持c++了..net的开发者就哭了.这篇博客解释了前世今生: https://blogs.msdn.microso ...

  2. [luogu5339] [TJOI2019]唱、跳、rap和篮球(容斥原理+组合数学)(不用NTT)

    [luogu5339] [TJOI2019]唱.跳.rap和篮球(容斥原理+组合数学)(不用NTT) 题面 略 分析 首先考虑容斥,求出有i堆人讨论的方案. 可以用捆绑法,把每堆4个人捆绑成一组,其他 ...

  3. 2、数据类型和运算符——Java数据类型

    一.强类型语言和弱类型语言: 1.1 强类型语言 强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java..net .Pyt ...

  4. 初学Git——命令总结

    首先,感谢廖雪峰老师制作的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0 ...

  5. Python核心技术与实战——七|自定义函数

    我们前面用的代码都是比较简单的脚本,而实际工作中是没有人把整个一个功能从头写到尾按顺序堆到一块的.一个规范的值得借鉴的Python程序,除非代码量很少(10行20行左右)应该由多个函数组成,这样的代码 ...

  6. git 流程 rebase rename

    git流程: git init --bare git checkout -b develop git checkout -b feature1 feature1: git add . git comm ...

  7. php iconv函数转换出错问题

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  8. 关于win7虚拟机的安装

    VMware 安装以及秘钥 win7的光盘文件

  9. 【bzoj 4554】【Tjoi2016&Heoi2016】【NOIP2016模拟7.12】游戏

    题目 分析 当没有石头的时候,就用二分图匹配来做. 但现在加入了石头, 所以,求出每行和每列联通快的个数,如果有一块平地,包括在某个行联通块以及某个列联通块中,连边. //无聊打了网络流,匈牙利也可以 ...

  10. vueroute的router.addRoutes

    router.addRoutes(routes: Array<RouteConfig>)动态添加更多路由到路由器.参数必须是使用与routes构造函数选项相同的路径配置格式的Array .