首页 技术 正文
技术 2022年11月12日
0 收藏 647 点赞 4,906 浏览 2231 个字

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,147
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,618
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,461
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,236
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,871
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,953