ORACLE_OCP之内存管理
一、内存管理:概述
- DBA必须将内存管理视为其工作的关键部分,因为:
- 可用内存有限
- 分配更多的内存来服务某些特定的功能从而提高整体性能
- 自动调整内存分配通常是适当的配置,但是特定环境甚至短期条件可能需要进一步注意
二、管理内存组件
- 自动内存管理(AMM)使您可以指定分配给实例的总内存(包括SGA和PGA)<不建议使用>
- 自动共享内存管理(ASMM): <建议使用>
- 使您可以通过一个初始化参数指定SGA总内存
- 使Oracle服务器可以管理分配给共享池,Java池,缓冲区高速缓存,流池和大型池的内存量
- 手动共享内存管理(MSMM):<不建议使用>
- 通过多个单独的初始化参数确定组件的大小
- 使用适当的Memory Advisor提出建议
三、高效的内存使用:准则
- 在物理内存中设置更加适当的SGA和PGA空间大小。
- 使用内存顾问。
- 进行相关优化以便于更有效的利用内存
- 减少整体物理I / O
- 减少总内存需求
四、Automatic Memory Management(AMM): 概述
- 借助自动内存管理,数据库服务器可以根据您的要求自动调整SGA和PGA的大小。
五、Oracle数据库内存参数
- 上一张PPT中的图形显示了内存初始化参数的层次结构。 尽管您只需设置MEMORY_TARGET即可触发自动内存管理,但是您仍然可以为各种缓存设置下限值。 因此,如果子参数是用户设置的,则它们是最小值,低于该最小值,Oracle数据库服务器将不会自动调整该组件。
- 如果SGA_TARGET和PGA_AGGREGATE_TARGET设置为非零值,则它们分别被视为SGA和PGA大小的最小值。 MEMORY_TARGET可以采用SGA_TARGET + PGA_AGGREGATE_TARGET到MEMORY_MAX_SIZE的值。
- 如果设置了SGA_TARGET,则数据库服务器仅自动调整SGA子组件的大小。 PGA会自动进行调谐,而与是否进行显式设置无关。 但是,整个SGA(SGA_TARGET)和PGA(PGA_AGGREGATE_TARGET)不会自动调整,即不会自动增长或收缩。
六、监视自动内存管理
- 使用以下视图监视自动内存管理:
- V$MEMORY_DYNAMIC_COMPONENTS:所有内存组件的当前状态
- V$MEMORY_RESIZE_OPS:最近800个内存调整大小请求的循环历史缓冲区
- V$MEMORY_TARGET_ADVICE:MEMORY_TARGET初始化参数的调整建议
七、自动共享内存管理(ASMM)–概述
- 自动适应工作负载变化
- 最大限度地提高内存利用率
- 帮助消除内存不足错误
八、理解自动共享内存管理
- ASMM基于MMON在后台捕获的工作负载信息。
- MMON使用内存顾问程序。
- MMAN将内存移到最需要的位置。
- 如果使用SPFILE(建议):
- 各组件大小在关闭时保存
- 保存的参数值用于启动数据库实例时引导相关内存组件大小
- 无需重新学习最佳值
MMON 内存监视进程
MMAN 内存管理进程
九、启用自动共享内存管理
-
从手动共享内存管理MSMM启用ASMM :
-
获取SGA_TARGET的值:
SELECT ((SELECT SUM(value) FROM V S G A ) − ( S E L E C T C U R R E N T S I Z E F R O M V SGA) - (SELECT CURRENT_SIZE FROM V SGA)−(SELECTCURRENTSIZEFROMVSGA_DYNAMIC_FREE_MEMORY)) “SGA_TARGET” FROM DUAL;
- 使用该值设置SGA_TARGET.
- 将自动调整SGA中各子组件的值设置为0.
-
从AMM切换到ASMM:
- 将MEMORY_TARGET初始化参数设置为0。
- 将自动调整大小的SGA各子组件的值设置为0.
- 合理设置PGA_AGGREGATE_TARGET(PGA)的值
- 合理设置SGA_TARGET(SGA)的值
-
将MEMORY_TARGET初始化值设置为0:
ALTER SYSTEM SET MEMORY_TARGET = 0;
-
设置SGA_TARGET的值:
ALTER SYSTEM SET SGA_TARGET=XXXM;
SGA_TARET的值一定小于SGA_MAX_SIZE的值。
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=XXXM;
-
-
SGA各子组件:
- SHARED_POOL_SIZE
- LARGE_POOL_SIZE
- JAVA_POOL_SIZE
- DB_CACHE_SIZE00
- STREAMS_POOL_SIZE
十、关闭ASMM
- 将SGA_TARGET设置为0将禁用自动调整。
- 自动调整的参数设置为其当前大小。
- 整个SGA大小不受影响。
十一、使用V$PARAMETER查看内存组件大小
SGA_TARGET = 8G
DB_CACHE_SIZE = 0
JAVA_POOL_SIZE = 0
LARGE_POOL_SIZE = 0
SHARED_POOL_SIZE = 0
STREAMS_POOL_SIZE = 0
SELECT name, value, isdefault
FROM v$parameter
WHERE name LIKE '%size';
十二、管理程序全局区(PGA)
注意:默认情况下,自动启用PGA内存管理。