网站首页 > 技术文章 正文
自动共享管理内存 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管理
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 566℃Oracle分析函数之Lag和Lead()使用
- 564℃几个Oracle空值处理函数 oracle处理null值的函数
- 550℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 543℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 518℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)