oracle启用amm,【内存管理】Oracle AMM自动内存管理详解
一、
Oracle
的三种内存管理方式
oracle
内存管理有三种方式,每一个
instance
只能够选择一种。这三种管理方式分别是
AMM
自动内存管理(
Automatic Memory Management
)、
ASSM
自动共享内存管理(
Auto Shared Memory Management
)、
msmm
手动共享内存管理(
Manual Shared Memory Management
)。
本文针对AMM
自动内存管理进行详细原理阐述。
二、
AMM
原理阐述
自动内存管理automatic memory management
(以下均称
AMM
)是
oracle 11g
新推出的新特性,意在对实例中的
PGA
和
SGA
进行自动管理。
AMM
是自动共享内存管理
automatic shared memory management
(
ASMM
)的拓展。
1.
在AMM
中涉及到的参数
- memory_max_target
- memory_target
- sga_max_size
- sga_target
- pga_aggregate_target
2.
AMM
的启用
方式一
:DBCA
图形界面下,要选择
AMM
自动内存管理,
step9
选择
use Automatic Memory Management
即可。如下图
方式二
:可以通过以下两个参数之一启用
- memory_target
:定义
sga
和
pga
总和的上限
- memory_max_taregt
:定义
memory_target
的上限
假设memory_max_target
设置为
1400m
,
memory_target
设置为
1000m
,那么只有
1000m
会被用在
instance
中,剩下的
400m
会被
oracle
用做储备。因为
memory_max_target
已经指定了,所以可以动态的修改
memory_target
参数,而不需要重启数据库。
如果memory_max_target
和
memory_target
相同,或者
memory_max_target
没有设置,那么
memory_target
就不能动态增长,并且修改后需要重启
instance
。
memory_max_target
将一直在参数文件中显式设置,或者被内存管理后台进程隐式设置。
memory_max_target
会定义
instance
锁定的内存。如果
memory_max_target
没有在参数文件中设置,那么他的大小默认为
mrmory_target
。
3.
AMM
的选项参数
所有的SGA
内存参数都会设置在
AMM
环境,如果
SGA
参数没有被设置,那么内存管理器将会进行以下设置:
60% to sga_target
40% to pga_aggregate_target
其他选项参数如下:
- sga_max_size
:这个参数设置
memory_target
中
SGA
的上限
- sga_target
:这个参数设置
memory_target
中的下限
- pga_aggregate_target
:这个参数仅是
instance
允许所有进程使用内存的总量。在
AMM
中,这个参数将随着
memory_target
的空闲空间进行浮动。
SGA
和
PGA
的总量不能超过
memory_target
。如果
sga_target
在参数文件中设置,它将代表着
SGA
的下限。此时
pga_aggregate_target
将会获得的内存
=
(
memory_target - sga_target
)
4.
通过memory_target
控制内存
DBA
可以通过一些选项去决定如何对内存中的各个组件进行分配。可以通过
MEMORY_TARGET
来控制
PGA
和
SGA
的增长。由于
memory_target
同时管理者
PGA
和
SGA
,内存控制器可以自由的在两者之间进行内存控制,没有任何的限制。如果要限制
PGA
的增长,可以设置
sga_target
参数大小,这就限制了
SGA
的最小值。在这种情况下,
PGA
就算增长,也不能让
SGA
缩小到超过他的最小值。如果要限制
SGA
的增长,可以设置
sga_max_size
的大小,这是
SGA
的上限值。
如果想要设置SGA
中某个组件的最小值,也可以进行单独设置。
SGA
中重要的组件如下:
- shared pool
(通过
shared_pool_size
参数管理)
- buffer cache
(通过
db_cache_size
参数管理)
- streams pool
(通过
streams_pool_size
参数管理)
- java pool
(通过
java_pool_size
参数管理)
- large pool
(通过
large_pool_size
参数管理)
三、
实验测试
情况一
只设置memory_target
- memory_target =1G
memory_max_target
不设置,所以它会被默认设置大小为
memory_target
。
执行以下SQL
:
SQL> show parameter memory;
NAME TYPE VALUE
--------------------
--
-- ----------- ----------------------
hi_shared_memory_address integer 0
memory_max_target big integer 1G
memory_target big integer 1G
shared_memory_address integer 0
SQL> select * from v$sgainfo where name like 'Maximum SGA%' or name like 'Free SGA%';
NAME BYTES RES
-------------------------------- ---------- ---
Maximum SGA Size 1068937216 No
Free SGA Memory Available 432013312
SQL> select component,current_size from v$memory_dynamic_components where component like '%Target%';
COMPONENT CURRENT_SIZE
------------------------------------------------ ------------
SGA
Target 641728512
PGA Target 432013312
总结
:
1)
初始所有的内存(1G
)会作为共享内存分配,
v$sgainfo
显示
SGA
最大值为
1G
,因为
sga_max_size
没有设置,因此默认
sga
最大值为
memory_target
。
2)
v$sgainfo
显示,有
412M
是空闲的内存,这些空闲的内存可以用在
PGA
,或者动态的设置
SGA
。
3)
内存的初始比是60%
给
SGA,40%
给
PGA
。在
sga_target
和
pga_aggregate_target
没有设置的情况下,这是默认的情况。这也就意味着,内存的
60%
(
612M
)给
SGA
,内存的
40%
(
412M
)给
PGA
。
4)
v$memory_dynamic_components
显示sga_target
设置
612M
,
pga_aggregate_target
设置
412M
。这里的
pga_aggregate_target
设置为
412M
不意味着
PGA
已经达到了
412M
。而是说明有
412M
空间可以给
PGA
增长。如果它增长超过
412M
,那么内存控制器将会从
SGA
中获取内存。
情况二
设置以下参数
- memory_target=1G
- sga_target=300M
- pga_aggregate_target=100M
memory_max_target
不设置,所以它默认值等于
memory_target
。
执行以下SQL
:
SQL> select * from v$sgainfo where name like 'Maximum SGA%' or name like 'Free SGA%';
NAME
BYTES
RES
-------------------------------- ---------- ---
Maximum SGA Size
1068937216
No
Free SGA Memory Available 759169024
SQL> select component,current_size from v$memory_dynamic_components where component like '%Target%';
COMPONENT
CURRENT_SIZE
------------------------------------------------- ------------
SGA Target 314572800
PGA Target 759169024
总结:
1)
初始所有内存(1G
)会被作为共享内存分配。
v$sgainfo
显示,
SGA
最大值为
1G
,因为
SGA_MAX_SIZE
没有设置,所以它默认大小等于
memory_target
。
2)
v$sgainfo
显示
724M
为空闲内存,这个值是由
memory_target
减去
sga_target
得到的。这些空闲内存可以用于
PGA
和
SGA
,并由
oracle
自动控制。
3)
v$memory_dynamic_components
视图显示SGA
设置为
300M,
但是
PGA
设置为
724M
,这个大小是
memory_target
分配后的剩余部分。这里的
PGA
的值为
724M
,并不意味着
PGA
已经占有了
724M
,也是意味着
PGA
可以占有最大值为
724M
。
4)
sga_target_size
默认值为
1G
,理论上这个就是
SGA
的最大值。
情况三
设置以下参数
- memory_target=1G
- sga_max_size=500m
- sga_target=300m
- pga_aggregate_target=100m
由于memory_max_target
没有设置,所以它默认大小为
memory_target
。
SQL> select * from v$sgainfo where name like 'Maximum SGA%' or name like 'Free SGA%';
NAME BYTES RES
-------------------------------- ---------- ---
Maximum SGA Size 521936896 No
Free SGA Memory Available 209715200
SQL> select component,current_size from v$memory_dynamic_components where component like '%Target%';
COMPONENT CURRENT_SIZE
---------------------------------------- ------------
SGA Target 314572800
PGA Target 759169024
总结:
1)
现在sga_target_size
设置为
500M
,
v$sgainfo
显示
SGA
最大值为
500M
2)
v$sgainfo
中显示,
SGA
可用值介于
sga_target
和
sga_max_size
之间
3)
超过sga_max_size
(
500M
)的内存不会给
SGA
使用,所以不会显示在
v$sgainfo
中
4)
v$memory_dynamic_components
视图中显示SGA
设置为
300M
,
PGA
设置为
700M
。这个
700M
的值,是
memory_target
减去
sga_target
得到的。
---- end ----
oracle启用amm,【内存管理】Oracle AMM自动内存管理详解相关推荐
- oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解
Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...
- oracle数据库按日期查询,关于Oracle数据库日期范围查询的两种实现方法详解,oracle详解...
关于Oracle数据库日期范围查询的两种实现方法详解,oracle详解 Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通过一个实例来介绍这一过程.我们假设 ...
- SQL全方位攻略:5. SQL “方言”大比拼:Oracle、MySQL、PostgreSQL限制检索行数语法详解(分页查询)
系列文章目录 SQL全方位攻略:1.数据库介绍 SQL全方位攻略:2.SQL介绍 SQL全方位攻略:3.SQL标准 SQL全方位攻略:4. 标准SQL和SQL"方言" 文章目录 系 ...
- 非常运维 一体化终端安全管理系统自动安装脚本详解
非常运维 一体化终端安全管理系统自动安装脚本详解 作者:高玉涵 时间:2019.03.13 13:52 博客:blog.csdn.net/cg_i 演示:https://v.youku.com/v ...
- python内存池_python内存监控工具memory_profiler和guppy的用法详解
python内存监控工具memory_profiler和guppy的用法详解 发布时间:2020-08-21 19:44:58 来源:脚本之家 阅读:123 python2.7在内存管理上相比pyth ...
- python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解
python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我 ...
- TPOT自动机器学习参数详解
TPOT自动机器学习参数详解 分类: 代码 class tpot.TPOTClassifier(generations=100, population_size=100,offspring_size= ...
- mysql 配置自动截断_MySql超长自动截断实例详解
MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...
- Tesla AI Day:特斯拉如何实现自动驾驶的详解
之前上课的时候偶然间看到了知乎上关于特斯拉如何实现自动驾驶的详解,因为我本身就是做算法的,对自动驾驶也很感兴趣,得知信息来源于Tesla的AI Day,于是下课后马不停蹄就去找了回放好好学习学习. 视 ...
- 计算机控制系统顾树生课后答案,清华大学出版社-图书详情-《自动控制原理习题详解》...
信息化时代的到来,为自动控制技术的应用开拓了更加广阔的空间.作为有关自动控制技术的基础理论--自动控制原理,已成为各高校许多学科和专业必修的技术基础课.深入理解和掌握<自动控制原理>中主要 ...
最新文章
- 基于linux服务器的性能分析与优化
- 八、Java中的i++和++i到底是什么?
- redis笔记_源码_内存分配
- mybatis批量插入数据到Oracle中的两种方式
- python-反射基础-hasattr-getattr-setattr
- 如何使用Postman和Newman在CI环境中自动化REST API端到端测试
- java如何同时画多个图形_如何绘制两个不同系列的箱线图?
- PHP+node采集58微聊聊天信息
- UI设计作品中经常会用到的设计技巧?|优漫动游
- 3个维度,帮助IT部门快速完成企业云盘选型!
- Intel-80386微处理器(IA-32架构)
- win2012R2无法打开匿名级安全令牌,安装.net 3.5
- redis 模糊删除keys
- 利用python做出电视剧收视率排行榜
- Vim 的 paste 模式
- Java实现荷兰国旗问题
- Python一键获取某排名第一的手游,所有英雄皮肤(附源码)
- 如何将word转换为带书签的pdf文件
- 【RPG Maker MV】RPG游戏《机器人养成记》制作笔记 - RPG Maker MV 界面介绍
- qsv的像素格式转换
热门文章
- 如何更优雅地使用 bilibili(b站)
- ARM开发板系统移植-----rootfs的制作
- AMD Opteron 185 + ATI RDX200 安装雪豹成功。
- Matlab使用regress函数进行回归分析
- MySQL命令行登录不上但是sqlyog能成功连接
- 工厂模式与建造者模式
- 前端面试题总结-初级
- 为什么现在90后员工离职率那么高?
- tcp_timestamps tcp_tw_recycle引起的服务器连接不上问题
- 北航计算机学院博士开题,关于硕士生、博士生开题报告的通知及规定-北航电子信息工程学院...