Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119398
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 205
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-12 15:22
个人简介

没有挫败,只有暂未成功而已。

文章分类

全部博文(28)

文章存档

2018年(28)

我的朋友

分类: Oracle

2018-10-23 21:48:46

1.是oracle 11g中的一个内存调整参数,11g对自动化管理内存方面又继续加强了,原来10g中可以对SGA进行自动管理与分配,11g即可以自动管理SGA,又可以自动管理PGA,对这两部分进行综合管理,自动调整所有内存区的大小。11g中默认为0
以下是设置memory_target相关参数的方法,静态参数需要重启数据库生效
alter system set memory_max_target= 1000m scope=spfile;
alter system set  memory_target= 1000m scope=spfile;
alter system set sga_max_size=600m scope=spfile;
alter system set pga_aggregate_target=400m scope=spfile;


2. memory_max_target 是设定 Oracle 能占物理内存多大空间,一个是 Oracle SGA 区最大能占多大内存空间+PGA区多大空间,memory_max_target是memory_target上限值,如果只设置了memory_max_target没有设置memory_target,则Oracle认为memory_target=0不使用内存自动管理。
3.如果只设置memory_target,没有设置memory_max_target,则Oracle自动将memory_max_target设置为memory_target。
4.如果同时设置这两个值,则memory_target的上限值为memory_max_target。
本地的memory_max_target值
SQL> show parameter memory_max_target


NAME                TYPE      VALUE
------------------ ---------------- ----------------------
memory_max_target     big integer    752M


SQL> show parameter memory_target
NAME                TYPE      VALUE
------------------ ---------------- ----------------------
memory_max_target     big integer    752M






5. 10g 的 sga_max_size 是动态分配 Shared Pool Size,database buffer cache,large pool,java pool,redo log buffer 大小的,根据 Oracle 运行状态来重新分配 SGA 各内存区大小。 PGA 在 10g 中需要单独设定(即手工管理)。
(1)memory_target设置为非0值
Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET  ,大小等于memory_max_size 一致。
sga_target和pga_aggregate_target都设置了大小,则这两个参数将做为最小起始值;
sga_target设置大小,pga_aggregate_target没有设置大小,那么 pga_aggregate_target初始化值=memory_target-sga_target
sga_target  没有设置大小,pga_aggregate_target设置大小,那么 sga_target 初始化值 =memory_target-pga_aggregate_target
sga_target  和 pga_aggregate_target都没有设置大小 Oracle 11g 将根据数据库运行状态自动分配大小。 但在数据库启动时会有一个固定比例来分配:
         ---  sga_target =memory_target *60%     pga_aggregate_target=memory_target *40%


(2)memory_target没有设置或等于0(11g中默认为0)
11g中默认为0则初始状态下取消了 memory_target 的作用,完全和10g在内存管理上一致,完全向下兼容。(也有三种情况来对 SGA 和 PGA 的大小进行分配)
SGA_TARGET 设置值,则自动调节 SGA 中的 shared pool,buffer cache,redo log buffer,java pool,larger pool内存区,PGA 则依赖 pga_aggregate_target 的大小单独设置。 sga和 pga不能自动增长和自动缩小。
SGA_target 和PGA_AGGREGATE_TARGET  都没有设置,SGA 中的各内存区大小都要明确设定,不能自动调整各内存区大小。PGA 不能自动增长和收缩。
memory_max_target设置而memory_target =0  这种情况和10g 一样不使用内存自动管理。
SQL> show parameter target
NAME                 TYPE    VALUE
------------------------------------ ---------------------- 
archive_lag_target     integer    0
db_flashback_retention_target     integer    1440
fast_start_io_target     integer    0
fast_start_mttr_target     integer    0
memory_max_target     big integer    752M
memory_target     big integer    752M
parallel_servers_target     integer    32
pga_aggregate_target     big integer    0
sga_target     big integer    0


现在我们看到sga_target和pga_aggregate_target的值都是0,由oracle自动调整大小,memory_target和memory_max_target的大小是752M


SQL> select * from v$memory_target_advice;  (分析数据库最佳内存大小)  


MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR    VERSION
----------- ------------------ ------------ ------------------- ----------
376       .5      111          1.1443                0
564       .75     97              1                0
752       1       97              1                0
940       1.25     97              1                0
 1128       1.5     97              1                0
 1316       1.75     97              1                0
 1504       2       97              1                0


已选择7行。
MEMORY_SIZE:oracle建议的内存大小
MEMORY_SIZE_FACTOR:内存基线因子 0.5, 0.75, 1, 1.25, 1.5, 1.75,2
ESTD_DB_TIME:For current memory size (MEMORY_SIZE_FACTOR = 1), the amount of database time required to complete the current workload. For a proposed memory size, the estimated amount of database time that would be required if the MEMORY_TARGET parameter were changed to the proposed size.(官方文档解释)
当内存基线因子为1时,完成当前数据库工作量所需要的所有数据库时间(即所有用户消耗的数据库时间),这是一个建议值,它会根据memory_target参数的改变而改变


ESTD_DB_TIME_FACTOR:For a proposed memory size, ratio of estimated database time to current database time(官方文档解释)
消耗数据库时间的比例因子


v$memory_target_advice这个视图快照的版本号


1.当memory_target=376M时,ESTD_DB_TIME=111
2.当memory_target=564M时,ESTD_DB_TIME=97    
3.当memory_target=752M时,ESTD_DB_TIME=97  当前值


从如上的系统资源消耗情况来看,memory_target=564M是之前752M的四分之三,但ESTD_DB_TIME的值是一样的,我们可以把memory_target=修改成564M,节约我们的内存资源
SQL> alter system set memory_max_target=564m scope=spfile;


系统已更改。


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


系统已更改。


SQL> show parameter target
NAME                 TYPE    VALUE
------------------------------------ ---------------------- 
archive_lag_target     integer    0
db_flashback_retention_target     integer    1440
fast_start_io_target     integer    0
fast_start_mttr_target     integer    0
memory_max_target     big integer    752M
memory_target     big integer    752M
parallel_servers_target     integer    32
pga_aggregate_target     big integer    0
sga_target     big integer    0


现在只是修改了spfile参数文件的内容,需要重启数据库才生效。




总结:我们可以根据v$memory_target_advice视图来合理的调整memory_target的内存值,提高资源利用率。
阅读(6376) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~