ITPub博客

首页 > 数据库 > Oracle > 数据库内存管理机制

数据库内存管理机制

原创 Oracle 作者:banana_62 时间:2017-06-05 22:52:42 0 删除 编辑
从9i开始实现了PGA自动化管理,10g开始实现了SGA自动化管理,11g版本可以同时管理PGA和SGA。
1.自动内存管理(AMM)
管理方式
Oracle实例从总体上管理服务器内存使用,动态调整PGA和SGA的内存。数据库在不同时间执行不同的任务时,会从不同的内存配置中获得收益。例如一个交易数据库,在月初需要大量的事务处理,在月末有大量的查询统计,这时事务处理需要使用较多的数据高速缓存,而查询事务通常需要较大的PGA配置,这个时候自动内存管理机制就是非常实用的。
但数据库内存大小并不是越大越好,如果内存过大,数据库在内存寻址时会花费较多的时间,也会导致使用交换区,这会严重影响性能。
在设置了AMM以后,数据库启动时,PGA和SGA的默认大小为memory_target的40%和60%。
设置方式
MEMORY_TARGET=非零值
当MEMORY_TARGET=非零值时,PGA_AGGREGATE_TARGET和SGA_TARGET的值表示PGA和SGA的最小大小。 
2.自动共享内存管理(ASMM)
管理方式
SGA包含多个内存结构(shared pool,data buffer cache,redo log buffer,large pool,java pool,stream pool),自动内存管理可以根据内存使用情况分配各个SGA内存结构,确保不存在因SGA组件不够大而带来错误。考虑到数据的安全性,日志缓冲区在实例启动时固定下来,不能进行自动管理,日志缓冲区又LOG_BUFFER参数进行设置。也就是说日志缓冲区是唯一不能动态调整的SGA内存结构。SGA_TARGET为SGA的最小大小
设置方式
MEMORY_TARGET=0
SGA_TARGET=非零值

3.手动共享内存管理
管理方式
除了LOG_BUFFER外,其他的SGA组件参数都可以动态修改大小,手动设置共享内存必须要考虑数据库业务是否需要调整SGA组件来满足要求,调整到多少比较合适,否则可能会产生组件内存不够大的错误。
设置方式
MEMORY_TARGET=0
SGA_TARGET=0
可以动态设置组件大小
SHARED_POOL_SIZE
DB_CACHE_SEIZ
LARGE_POOL_SIZE
STREAMS_POOL_SIZE
JAVA_POOL_SIZE
日志缓冲区参数设置重启实例生效
LOG_BUFFER
4.自动PGA内存管理
管理方式
数据库会根据需求将PGA分配给会话,PGA总量不会超过pga_aggregate_target的值,默认值是大于10MB或是SGA的20%,应对其向上调整,但又不至于过高导致内存分配过量
设置方式
MEMORY_TARGET=0
PGA_AGGREGATE_TARGET=非零值
WORKAREA_SIZE_POLICY=AUTO
5.手动PGA内存管理
管理方式
手动管理PGA时,pga的各个组件大小都是一定的。
设置方式
MEMORY_TARGET=0
PGA_AGGREGATE_TARGET=0
WORKAREA_SIZE_POLICY=MANUAL        
SORT_AREA_SIZE=非零值
HASH_AREA_SIZE=非零值
BITMAP_MERGE_AREA_SIZE=非零值

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31461640/viewspace-2140316/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 一个开始
请登录后发表评论 登录
全部评论

注册时间:2017-05-18

  • 博文量
    71
  • 访问量
    65045