共计 3496 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章主要讲解了“AMM 与 ASMM 相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“AMM 与 ASMM 相关知识点有哪些”吧!
一、AMM 相关知识:
1. 从 oracle 11.1 开始 oracle 提供了通过 MEMORY_TARGET 参数实现自动 SGA 和 PGA 自动管理的功能,从此版本开始不再需要明确设置 SGA_TARGET 及 PGA_AGGREGATE_TARGET,这个被支持在 linux、windows、solaris、hpux、aix。
2. 在使用 MEMORY_TARGET 参数的 linux 机器上,在 oracle 启动时遇到 ORA-00845 是由于 /dev/shm 的大小小于 memory_target 所致(df -k /dev/shm),如果设置 memory_max_target memory_target,则需要确保 /dev/shm 至少 memory_max_target
3. 从 11.1.0.6.0 开始 ASM 实例默认实现自动管理 SGA 及 PGA,(禁用 ASM 实例的自动内存管理,必须手动设置 memory_target 到 0,DBCA 界面将不支持此更改,这个 bug 被修正在 11.1.0.7.0)
4.10.1 版本之前 shared pool 在 SGA 中分配的大小 =shared_pool_size+ 内部 SGA 的开销,此开销被用来维护 SGA 中各组件的状态,从 10.1 开始 shared_pool_size 将包括内部 SGA 的开销
5. 在手动内存管理模式下,由于 shared_pool_size 太小不足以容纳内部 SGA 开销将导致 ORA-00371
6. 在非 windows32 位的操作系统上 SGA_MAX_SIZE 默认被设置为 memory_target 和 memory_max_target 中的最大值,在 windows32 操作系统上 sga_max_size=60%memory_target+60%memory_max_target+25% 可用虚拟地址空间
7. 当 lock_sga 初始化参数被设置为 true 时将不能启用自动内存管理
二、启用、配置 AMM:
SQL show parameter lock_sga —— 确保 lock_sga 为 false
SQL show parameter target —— 确定当前 SGA_TARGET 及 PGA_AGGREGATE_TARGET 的值
SQL select value from v$pgastat where name= maximum PGA allocated — 确定从上次启动 DB 后的最大实例的 PGA
memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)
为 MEMORY_MAX_TARGET 确定一个尽可能大的值,等于或大于 SGA_TARGET
当 DB 使用 spfile 时:ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE; 当 DB 使用 pfile 时: 编辑 pfile 设置 memory_max_target = nM memory_target = mM
关闭并重启 DB
ALTER SYSTEM SET MEMORY_TARGET = nM; ALTER SYSTEM SET SGA_TARGET = 0; ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;
——-!!! 如果你在 pfile 中设置了 MEMORY_TARGET 没有设置 MEMORY_MAX_TARGET,则数据库自动设置 MEMORY_MAX_TARGET 值为 MEMORY_TARGET 的值
——-!!! 如果你在 pfile 中设置了 MEMORY_MAX_TARGET 而没有设置 MEMORY_TARGET,则 MEMORY_TARGET 默认为 0,在 DB 启动后可以动态改变 MEMORY_TARGET 不超过 MEMORY_MAX_TARGET 的值
——-!!! 也可以设置 SGA_TARGET 或 PGA_AGGREGATE_TARGET 为一个非 0 的值,这个值将作为 SGA 或 PGA 分配的最小值
三、监视、优化 AMM:
SQL select * from v$memory_target_advice order by memory_size;
——-MEMORY_SIZE_FACTOR 表示假设替代的 MEMORY_TARGET 大小
——-ESTD_DB_TIME 表示在此预计的 MEMORY_TARGET 大小下所需的 DB time
二、ASMM 相关知识:
1.SGA_MAX_SIZE 设置: 如果不设置则 oracle 在初始化的时候将选择所有指定组件的总和或者默认值,如果设置的值比分配给所有组件的内存小,那么数据库将忽略此设置的值
2.SGA_TARGET 设置: 在设置之前,同时为了启用自动共享内存管理的功能,STATISTICS_LEVEL 必须被设置为 TYPICAL (the default) 或 ALL,如果此参数被设置那么必须设置自动调整大小的组件的大小为 0 或最小值
3.SGA 中能自动调整大小的组件:Fixed SGA、SHARED_POOL_SIZE、LARGE_POOL_SIZE、JAVA_POOL_SIZE、DB_CACHE_SIZE、STREAMS_POOL_SIZE
4.SGA 中不能自动调整(固定) 大小的组件:LOG_BUFFER、DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE、DB_nK_CACHE_SIZE
5.SGA 中分配内存的单位: 在 SGA 中动态分配各组件大小的最小单元是颗粒,通常来说在多数平台上如果 SGA 的大小 =1G, 则颗粒大小是 4M,SGA 1G, 则颗粒大小为 16M(32 位 NT 上 SGA 1G, 则颗粒大小为 8M)
6. 查询 V$SGAINFO 或 V$SGA_DYNAMIC_COMPONENTS 看颗粒的大小,如果手动给 SGA 中组件分配的内存不是颗粒的倍数,则 DB 实际给该组件分配 (四舍五入到最小粒度的倍数) 大于分配值为其颗粒倍数的是小值
7.SGA_MAX_SIZE 不能被动态修改
三、启用、配置 ASMM:
从 MSMM 到 ASSM:
1. 获得 SGA_TARGET 的值 SELECT ((SELECT SUM(value) FROM V$SGA) – (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)) SGA_TARGET FROM DUAL;
2. 修改 pfile 中 sga_target 的值并重启 DB, 或者 ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}]
3. 通过修改 pfile 中各自动调优组件对应的初始化参数的值为 0 或最小分配量,或者 alter system set %_size=0——————期望的最小值
从 AMM 到 ASMM:
1.ALTER SYSTEM SET MEMORY_TARGET = 0
2. 通过修改 pfile 中各自动调优组件对应的初始化参数的值为 0 或最小分配量,或者 alter system set %_size=0- 期望的最小值
——— 启用 ASMM 后可以动态调整相应自动调整组件的最小值,该值只限制该组件大小不能减小到此值以下,但不限制组件的最大值
——— 动态设置 sga_target 一个非 0 值之前,也就是启用 ASMM 之前最好重启 DB,因为共享池不能被动态收缩,因为其中含有一些打开的游标、PL/SQL 包及 sql 的执行状态
——— 手动调整大小的组件也可以动态改变,但增加或减少的相应值都从自动调整大小组件中动态获取或释放,而且设置的是一个精确的值
四、监视、优化 ASMM:
SQL select * from v$sga_target_advice order by sga_size;
五、建议参考 (from Yong Huang):
配置总大小时参考如下:
在现在操作系统内存比较充足的情况下,初始一般将 shared pool 设置为 1 至 3G, 其余的分配给 buffer cache
10gASMM 中 db_cache_size 至少 2G
11g 中将禁用 AMM 使用 ASMM,因为能够使用大的缓冲页
感谢各位的阅读,以上就是“AMM 与 ASMM 相关知识点有哪些”的内容了,经过本文的学习后,相信大家对 AMM 与 ASMM 相关知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!