网站首页 > 技术文章 正文
自动共享管理内存 ASMM
1.ASMM 的作用
从 Oracle 10g 开始,Oracle 提供了自动 SGA 的管理(简称 ASMM,Automatic SharedMemory Management)新特性。所谓 ASMM,就是指我们不再需要手工设置 shared pool、buffer pool 等若干内存池的大小,而是为 SGA 设置一个总的大小尺寸即可。Oracle 数据库会根据系统负载变化,自动调整各组件的大小,从而使得内存始终能够流向最需要它的地方。
例如,假设某个系统在上午 10:00 到下午 9:00 属于 OLTP 应用,因而可能会用到多的 BUFFER CACHE;而下午 9:00 到上午 10:00 属于 OLAP 系统,可能会用到较大的 SHARED POOL 和 LARGE POOL。如果我们启用了 ASMM,数据库就会根据负载的变化而自动对内存大小进行调整,就不需要数据库管理员手工进行调整了。
2.如何使用 ASMM
Oracle 10g 提供了一个新的初始化参数:sga_target 来启动 ASMM,该参数定义了个 SGA 的总容量。同时,初始化参数 statistics_level 必须设置为 typical 或 all 才能启动ASMM,否则如果设置为 basic,则关闭 ASMM。
ASMM只能自动调整5 个内存池的大小,它们是:shared pool、buffer cache、large pool、java pool 和 stream pool 。 我 们 不 再 需 要 设 置 shared_pool_size 、 db_cache_size 、large_pool_size、 java_pool_size、streams_pool_size 这五个初始化参数。而其他的内存池,比如 log buffer、keep buffer cache 等仍然需要 DBA 手工进行调整。
Oracle 10g 还提供了另一个初始化参数 sga_max_size。sga_target 的值不能超sga_max_size 的值,修改 sga_max_size 时,必须重启实例才能生效,而 sga_target 则可以在线修改,立即生效,无须重启实例。
3.ASMM 的原理
为了实现 ASMM,Oracle 新引入了一个名为 MMAN(Memory Manager)的后台进程。每隔很短的一段时间,MMAN 进程就会启动,然后去询问一下 Oracle 提供的各个内存组件顾问,比如有 buffer cache 顾问,也有 shared pool 顾问,由这些顾问根据当前的负载情况将这 5 个可以自动调整的内存池的、建议的大小尺寸,返回给 MMAN。于是,MMAN 进程就会根据该返回的值,来设置各个内存池。同时,如果我们使用了 spfile,还会将这些顾问得出的建议值写入 spfile 里。这样,下次启动实例时,就可以直接把顾问得出的建议值拿来作为启动内存池的依据了。
如果我们启用了 ASMM,同时又手工设置了可以自动调整大小的内存池的尺寸,比如设置了参数 shared_pool_size 为一个非 0 值的时候,会怎么样?对于 Oracle 10g 来说,我们为自动调整大小的内存组件设置了值,则会以我们设置的值作为自动调整的最小值。也是说,假设 sga_target 为 4GB,而我们将 shared_pool_size 设置为 600MB,则 MMAN 在进行自动调整时,永远不会将 shared pool 设置为 600MB 以下。
4.11g 中的 ASMM
在 Oracle11g 数据库中,使用自动内存管理特性不再需要设定参数 SGA_TARGET 和PGA_AGGREGATE_TARGET,,因为这两个参数都已经被修改成自动调优的,除非想指定PGA 和 SGA 的最小值才需要设定这两个参数。
在 Oracle11g 数据库中,则需要设置一个叫做 MEMORY_TARGET 的初始化参数,这个参数是指整个 Oracle 实例所能使用的内存大小,包括 PGA 和 SGA 的整体大小,在MEMORY_TARGET 的内存大小之内,PGA 和 SGA 所用的内存可以根据当前负载情况自动相互转换。
如果当初始设定的 MEMORY_TARGET 的内存不够当前数据库使用的时候,Oracle11g还提供了另外一个初始化参数 MEMORY_MAX_TARGET,当原始设定的内存不够使用的时候,可以手工来动态 调节 MEMORY_TARGET 的大小,但是不允许超过 MEMORY_MAX_TARGET 的值。下面这张图简单明了的描述出了 Oracle11g 数据库内存大小的设定参数。
写在最后的话
感谢各位的支持与阅读,后续会继续推送相关知识和交流,欢迎交流、转发和关注,感谢!
猜你喜欢
- 2024-10-15 详解Oracle 性能优化之内核的shmall、shmmax和信号灯参数
- 2024-10-15 Oracle基础知识杂谈 oracle的
- 2024-10-15 ORACLE不常用冷知识之Package oracle中package怎么执行的
- 2024-10-15 使用zabbix监控Oracle内存占用高 oracle占用内存过高
- 2024-10-15 Oracle HugePage在生产环境中的使用
- 2024-10-15 记一次Oracle异常关闭资源没有被释放,导致无法正常重启的故障
- 2024-10-15 oracle性能调优-impdp导入加速 oracle19c impdp
- 2024-10-15 oracle实例是什么 oracle实例是什么 lisener
- 2024-10-15 十个最流行的Oracle性能指标,DBA必知
- 2024-10-15 只需3分钟,学会Oracle数据库自动SGA管理
你 发表评论:
欢迎- 最近发表
-
- 前端流行框架Vue3教程:13. 组件传递数据_Props
- 前端必看!10 个 Vue3 救命技巧,解决你 90% 的开发难题?
- JAVA和JavaScript到底是什么关系?是亲戚吗?
- Java和js有什么区别?(java和javascript的区别和联系)
- 东方标准|Web和Java的区别,如何选择这两个专业
- 前端面试题-JS 中如何实现大对象深度对比
- 360前端一面~面试题解析(360前端笔试)
- 加班秃头别慌!1 道 Vue 面试题,快速解锁大厂 offer 通关密码
- 焦虑深夜刷题!5 道高频 React 面试题,吃透 offer 稳了
- 2025Web前端面试题大全(整理版)面试题附答案详解,最全面详细
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)