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的时候注意一下,记得给操作系统留出足够的内存
Oracle12c ASMM和hugepage的更多相关文章
- 为Linux版本Oracle 11gR2配置HugePage
HugePage是Oracle在Linux版本下一种性能优化手段.对于共享内存区域(SGA)的数据库系统,Oracle通常都推荐在操作系统层面配置上HugePage,为Oracle实例准备更大的可用共 ...
- Oracle 11g AMM与ASMM切换
现在的Oracle正在往智能化方向发展.如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题.但是进入10g之后,自动内存池调节成为一个重要Oracl ...
- ORACLE ASMM与AMM的总结
概念对比介绍 相信有些人会对ORACLE当中的AMM(Automatic Memory Management)与ASMM(Automatic Shared Memory Management)有些 ...
- 在Linux 64位系统下使用hugepage
首先,为什么要介绍/使用HugePage? 在步入正题之前,先讲一个非常普遍的数据库性能问题. 众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中 ...
- 转 用好HugePage,告别Linux性能故障
超过32G 的数据库,可以是使用如下方法配置. ######### Slow Performance with High CPU Usage on 64-bit Linux with Large SG ...
- Linux配置hugepage
对于内存较大的Oracle数据库server,配置HugePage是非常有必要的,以下是配置Huge的步骤: 我的环境: OS:CentOS release 6.4 (Final) Oracle:11 ...
- Oracle内存管理方式由amm切换为asmm
(一)ASMM和AMM 在Oracle 10g时,Orale推出ASMM(Automatic Shared Memory Managed),实现了SGA和PGA各自内部的自调节.在Oracle 11g ...
- Centos7安装Oracle12c
环境: CentOS7@VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle12C企业版64位 过程纪要: root身份安装依赖包: compat-libstdc+ ...
- CentOs5.8下安装Oracle12C
12C安装向导: http://docs.oracle.com/database/121/LTDQI/toc.htm 12C下载地址: http://www.oracle.com/technetwor ...
随机推荐
- 原生js事件委托(事件代理)方法扩展
原生js事件委托(事件代理)方法扩展: 通过Node底层原型扩展委托方法 /** * 事件委托方法 * @param eventName {string}:事件名称,如'click' * @param ...
- offsetWidth clientWidth scrollWidth 的区别
了解 offsetWidth clientWidth scrollWidth 的区别 最近需要清除区分开元素的width,height及相应的坐标等,当前这篇用来区分offsetWidth clien ...
- Rust学习笔记1
这是一份不错的rust教程,目前包括4个block和4个project.全部完成后可以用rust实现一个简单的key-value存储引擎. 注意:Windows下rust貌似会遇到一些bug,强烈建议 ...
- scala学习笔记(7)
1.包 --------------------------------------- Scala中的包和Java或者C++中命名空间的目的是相同的:管理大型程序中的名称. package a{ pa ...
- 解决HTML乱码
转自:https://blog.csdn.net/yuxisanno139/article/details/80675426
- Linux下RabbitMQ安装、运行与管理
Linux下RabbitMQ安装.运行与管理 安装erlang 安装参考官网 RabbitMQ的安装需要Erlang的基础环境,必须按照RabbitMQ Erlang版本要求进行安装. 关于Erlan ...
- DRF之Jwt 实现自定义和DRF小组件及django-filter插件的使用
一.DRF之Jwt 实现自定义 二.DRF(过滤,排序,分页)组件 三.Django-filter插件的使用和自定义 """ 1.drf-jwt手动签发与校验 :只是做t ...
- 01.Linux-CentOS系统清理缓存脚本
#自动清理缓存脚本 [root@k8s-node3 ~]# vim freemem.sh#! /bin/sh#当前已使用内存大小used=`free -m | awk 'NR==2' | awk '{ ...
- Codeforces 955 LR询问 多次幂处理
A 模拟题 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) ...
- [git]git的基本原理|git branch|git
继续写一篇git的文章,介绍下git的历史和基本原理. 介绍下git的历史,据砖家考究,遥想当年,linux的创始人,牛人李纳斯,开发linux用的版本控制工具BitKeeper,出于公益或友好, 是 ...