【分享与探讨二】:关于ORACLE的内存管理

【问题】从Oracle 11g开始,ORACLE默认使用AMM(自动内存管理),即让数据库完全管理SGA、PGA的大小,而对于管理员只需要设置一个总的大小(memory_target),数据库会动态的调整SGA、PGA的大小以及其中包含的各个组件大小,如Database buffer cache、Shared pool等。这个特性设计的初衷...显示全部

【问题】从Oracle 11g开始,ORACLE默认使用AMM(自动内存管理),即让数据库完全管理SGA、PGA的大小,而对于管理员只需要设置一个总的大小(memory_target),数据库会动态的调整SGA、PGA的大小以及其中包含的各个组件大小,如Database buffer cache、Shared pool等。这个特性设计的初衷是好的,它希望避免不正确的SGA和PGA设置导致的内存使用不平衡的性能问题。但是在实际应用过程中,这个特性是不是一定非常出色呢?

【分析】AMM中在数据库启动是会有一个固定比例来分配SGA/PGA 大小:
sga_target =memory_target 60% pga_aggregate_target=memory_target 40%。
但是在并发较高,数据库非常繁忙的场合下,自动内存调整的速度很可能赶不上大量会话对内存的请求的速度。另外当PGA随着会话不断增加而需求量猛增的情况下,它会首先抢占SGA,导致数据库性能故障。

【建议】在高并发的数据库场景中并不建议使用AMM。采用10g更为成熟的自动共享内存管理(ASMM)和自动PGA管理。手动调整以下参数:

memory_target=0
memory_max_target=0
sga_max_size=XG
sga_target=XG
pga_aggregate_target=XG
large_pool_size=256M

收起
参与2

返回haizdl的回答

haizdlhaizdl技术经理大连

【问题】从Oracle 11g开始,ORACLE默认使用AMM(自动内存管理),即让数据库完全管理SGA、PGA的大小,而对于管理员只需要设置一个总的大小(memory_target),数据库会动态的调整SGA、PGA的大小以及其中包含的各个组件大小,如Database buffer cache、Shared pool等。这个特性设计的初衷是好的,它希望避免不正确的SGA和PGA设置导致的内存使用不平衡的性能问题。但是在实际应用过程中,这个特性是不是一定非常出色呢?

【分析】AMM中在数据库启动是会有一个固定比例来分配SGA/PGA 大小:
sga_target =memory_target 60% pga_aggregate_target=memory_target 40%。
但是在并发较高,数据库非常繁忙的场合下,自动内存调整的速度很可能赶不上大量会话对内存的请求的速度。另外当PGA随着会话不断增加而需求量猛增的情况下,它会首先抢占SGA,导致数据库性能故障。

【建议】在高并发的数据库场景中并不建议使用AMM。采用10g更为成熟的自动共享内存管理(ASMM)和自动PGA管理。手动调整以下参数:

memory_target=0
memory_max_target=0
sga_max_size=XG
sga_target=XG
pga_aggregate_target=XG
large_pool_size=256M

银行 · 2017-05-09
浏览1402

回答者

haizdl
haizdl101634
技术经理大连
擅长领域: 灾备存储服务器

haizdl 最近回答过的问题

回答状态

  • 发布时间:2017-05-09
  • 关注会员:1 人
  • 回答浏览:1402
  • X社区推广