ITPub博客

首页 > 数据库 > Oracle > 11G内存自动管理(AMM)参数memory_target实验

11G内存自动管理(AMM)参数memory_target实验

原创 Oracle 作者:jionjionyoushen 时间:2014-09-14 20:58:19 0 删除 编辑

Oracle9i引入pga_aggregate_target,可以自动对PGA进行调整;

Oracle10引入sga_target,可以自动对SGA进行调整。

Oracle11g则对这两部分进行综合,引入参数memory_target和memory_max_target,可以自动调整所有的内存,这就是新引入的自动内存管理(AMM)特性。

下面我们通过以下的几个命令来让大家清楚memory_target 的设置与PGA与SGA的关系:

第一步:

SQL> alter system set memory_target=412m scope=spfile;

System altered.

计算机生成了可选文字: 黑粤嘿奥奥奥兰一。一,。。1.:二
一一翌一
}些1资”已r竺u」竺mDr,尹。ure55亡叮‘e芍er
JITIe川Ur夕一川已x一‘已rge'

SQL> alter system set sga_target=0 scope=spfile;

System altered.

SQL> alter system set pga_aggregate_target=0 scope=spfile;

System altered.

计算机生成了可选文字: 困口…l--
、份I助0,S、‘了‘te.32、e一d一e二e
,妇_pl
勺卫生
10010趁
,一r一‘二,'.人.‘尹
.}司
sho衬paraoeterpga;
T甘PE
UnLUE
..一、户E一
C一L洲l
一.、一一O}n一
一10一一SN一
Ipga一99,egate一a,get
biginteger日
…“
}竺
QL>sho

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 472887296 bytes

Fixed Size 1375368 bytes

Variable Size 369099640 bytes

Database Buffers 96468992 bytes

Redo Buffers 5943296 bytes

Database mounted.

Database opened.

设置memory_target参数后,实际上Oracle会自动设置并调整以下两个参数来分配SGA和PGA的内存,这和Oracle10g自动设置sga_target后分配db_cache_size和shared_pool_size的机制是一样的

 

SQL> select a.ksppinm name,b.ksppstvl value

2 from x$ksppi a,x$ksppcv b

3 where a.indx=b.indx

4 and (a.ksppinm like '%sga_target%'

5 or a.ksppinm like '%pga_aggregate_target%');

NAME VALUE

---------------------------------------- ------------------------------

sga_target 0

__sga_target 281018368

pga_aggregate_target 0

__pga_aggregate_target 150994944

192937984

第二步:

        现在sga_target和pga_aggregate_target都一设置成了0M,memory_target也为0M。修改memory_target的大小,查看数据库是怎么自动分配内存的?

SQL> alter system set memory_target=450m scope=spfile;

系统已更改。

 

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

 

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  472887296 bytes

Fixed Size                  1375368 bytes

Variable Size             369099640 bytes

Database Buffers           96468992 bytes

Redo Buffers                5943296 bytes

数据库装载完毕。

数据库已经打开。

 

SQL> select a.ksppinm name,b.ksppstvl value

2 from x$ksppi a,x$ksppcv b

3 where a.indx=b.indx

4 and (a.ksppinm like '%sga_target%'

5 or a.ksppinm like '%pga_aggregate_target%');

NAME VALUE

---------------------------------------- ------------------------------

sga_target 0

__sga_target 281018368

pga_aggregate_target 0

__pga_aggregate_target 192937984

大家可以发现,Oracle自动内存管理(AMM),自行将__pga_aggregate_target调大了,并没有人为修改过,Oracle自动调整修改的。

 

 

下面我们了解一下ORA-00845的由来与解决方案:

如果memory_max_target/memory_target设置过大,可能导致instance无法启动,报ORA-00845错误

SQL> alter system set memory_max_target=300m scope=spfile;

System altered.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORA-00845: MEMORY_TARGET not supported on this system

这个错误有点误导,实际上这并不是说该平台版本上不支持AMM特性,只是设置的memory_max_target超过了系统中设置的share memory(/dev/shm)而已。在Oracle11g for linux中似乎使用了一种新的机制来管理共享内存段,而不是传统的sys /dev/shm了。在alert.ora中可以找到更准确的错误描述

 

AMM 的限制

如果初始化参数 LOCK_SGA = true ,则 AMM 是不可用的。

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

上一篇: 数据库关闭
请登录后发表评论 登录
全部评论

注册时间:2013-02-28

  • 博文量
    14
  • 访问量
    66523