Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153603
  • 博文数量: 51
  • 博客积分: 1545
  • 博客等级: 上尉
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-31 10:20
文章分类

全部博文(51)

文章存档

2011年(3)

2010年(48)

我的朋友

分类: Oracle

2010-03-04 10:35:22

如何在Oracle 11g R1下的实现自动内存管理

/  2010-02-03 09:58:52 / 个人分类:Oracle

/ /
Oracle在简化内存方面过去几年做了巨大的努力,从Oracle 9i通过PGA_AGGREGATE_TARGET参数实现PGA自动管理开始,Oracle 通过SGA_TARGET参数实现了SGA的自动管理,Oracle 11g更是惊人地实现了所有内存块的全自动化管理,它使得动态管理SGA和PGA成为现实。

  写本文时,自动内存管理(AMM)已经在主流平台上得到支持,包括Linux,Windows,Solaris,HP-UX,AIX。

  AMM参数

  自动内存管理是用两个初始化参数进行配置的:

  MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,这个参数是动态的,因此提供给Oracle的内存总量是可以动态增大,也可以动态减小的。它不能超过MEMORY_MAX_TARGET参数设置的大小。默认值是0。

  MEMORY_MAX_TARGET:这个参数定义了MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET值,默认等于MEMORY_TARGET的值。

  使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。

  AMM配置

  在数据库创建过程中,数据库配置助手(DBCA)允许你配置自动内存管理。

  

  在手动创建数据库时,只需要在创建数据库之前设置合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。

  在一个系统上启用自动内存管理其实很简单,不需要事先做太多的事情,可以使用下面的计算公式来计算:

  MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximumPGAallocated")

  下面的查询语句向你展示有关的信息,以及如何计算出需要的值:

1--Individual values.
a3F+| J8} ~0
2ITPUB个人空间X4nBo1a+V3f HZ
3  COLUMNname FORMAT A30ITPUB个人空间 XoX7w l
4ITPUB个人空间O+C/^qw~2]4h2v
5  COLUMNvalue FORMAT A10ITPUB个人空间#e;X6tgn)f ]
6ITPUB个人空间6m be'}+Y c
7  SELECTname, valueITPUB个人空间c d9D!RE2h
8ITPUB个人空间+t;as b2C;~-H7Y
9  FROMv$parameterITPUB个人空间Da~%qL?Pc$dk X
10
Al9]}]2l?^6AT0
11  WHEREnameIN('pga_aggregate_target','sga_target')
%TD-j%l9})F8VlX0
12
0V-H4\)ZWa0
13  UNIONITPUB个人空间1SRq Fc7wc$K
14
Y ^[6E f-y0
15  SELECT'maximum PGA allocated'ASname, TO_CHAR(value)ASvalueITPUB个人空间Ka_.fVQ+O}
16
c!}-EMZn F+H$qA0k/A0
17  FROMv$pgastat
+A5Omt#Xo S0
18ITPUB个人空间};t_ vbue(f3e0G
19  WHEREname='maximum PGA allocated';ITPUB个人空间 k*r)@&S3Ak B
20
7B6L:XV4jW0
21  --Calculate MEMORY_TARGET
$C m IQt0
22ITPUB个人空间1UP P yt5]o
23  SELECTsga.value+GREATEST(pga.value, max_pga.value)ASmemory_target
!q$?;s+Ar)OZT0
24ITPUB个人空间.YxL3zSBs
25  FROM(SELECTTO_NUMBER(value)ASvalueFROMv$parameterWHEREname='sga_target') sga,ITPUB个人空间S hv"a3Oz8B~R
26
0mk/`[:~7\ kt i$W0
27  (SELECTTO_NUMBER(value)ASvalueFROMv$parameterWHEREname='pga_aggregate_target') pga,
-T;n0t8UK5S0
28
~qS\0a#Z0
29  (SELECTvalueFROMv$pgastatWHEREname='maximum PGA allocated') max_pga;
im y9}T#f&KJ9| J0
30ITPUB个人空间;Np%xZY0]
31  假设我们需要的设置是5G,那么我们可以执行下面的语句: CONN/ASSYSDBAITPUB个人空间1^6F(P(o$mzN7~G
32ITPUB个人空间,O&T6a"Yru _
33  --Set the static parameter. Leave some room for possible future growth without restart.ITPUB个人空间e:dmm&[!er m^
34ITPUB个人空间M"m"G Wh
35  ALTERSYSTEMSETMEMORY_MAX_TARGET=6G SCOPE=SPFILE;
3Yq_%UiBM-T0
36
(AjKTT R*B-m0
37  --Set the dynamic parameters. Assuming Oracle has full control.ITPUB个人空间*Biq7Ql f D7Ed f
38
P8j?Z9vQ.GW0
39  ALTERSYSTEMSETMEMORY_TARGET=5G SCOPE=SPFILE;ITPUB个人空间]/CLV WN2@eS%h
40
J$~Z2|1N7X0
41  ALTERSYSTEMSETPGA_AGGREGATE_TARGET=0SCOPE=SPFILE;ITPUB个人空间(v!s E0I D"b.i(l$V}
42
0B v3bOVzn `0
43  ALTERSYSTEMSETSGA_TARGET=0SCOPE=SPFILE;
AoAw3z _{0
44ITPUB个人空间J.C x7d@t,]L'l~
45  --Restart instance.ITPUB个人空间,]3^&b U Zn
46
2RAK$lLy+V6r0
47  SHUTDOWNIMMEDIATE;
kPZ F} b S0
48ITPUB个人空间n0ecsJ
49  STARTUP;ITPUB个人空间"k7y!{GP.YS
50

   当数据库重启后,MEMORY_TARGET参数就可以在不重启实例的情况下随意改变大小了。如: ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=SPFILE;

AMM调整

除现有的用于内存管理的V$视图外,Oracle 11g还新增加了下面4个视图用于自动内存管理:

◆V$MEMORY_CURRENT_RESIZE_OPS
b8VL,T U9b)O'{0◆V$MEMORY_DYNAMIC_COMPONENTSITPUB个人空间%N?*x*t;m8s1G
◆V$MEMORY_RESIZE_OPS
-\zV,ce$Z0◆V$MEMORY_TARGET_ADVICE

  为每个动态组件分配的内存大小使用视图V$MEMORY_DYNAMIC_COMPONENTS显示:

COLUMN component FORMAT A30

SELECT  component, current_size, min_size, max_size
FROM    v$memory_dynamic_components
WHERE   current_size != 0;


COMPONENT                      CURRENT_SIZE   MIN_SIZE   MAX_SIZE
------------------------------ ------------ ---------- ----------
shared pool                       197132288  192937984  197132288
large pool                          4194304    4194304    4194304
 pool                          41943040   41943040   41943040
SGA Target                        318767104  285212672  318767104
DEFAULT buffer cache               71303168   41943040   75497472
PGA Target                        104857600  104857600  138412032

6 rows selected.

SQL>

  V$MEMORY_CURRENT_RESIZE_OPS和V$MEMORY_RESIZE_OPS分别显示了组件当前改变大小操作的信息和上一次改变大小操作的信息。

  V$MEMORY_TARGET_ADVICE提供了帮助调整MEMORY_TARGET参数的信息,它显示了一段MEMORY_TARGET设置可用的范围,根据当前的设置,估算完成当前负载所需要的DB Time值。

SELECT * FROM v$memory_target_advice ORDER BY memory_size;

MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR    VERSION
----------- ------------------ ------------ ------------------- ----------
        303                .75         3068              1.0038          2
        404                  1         3056                   1          2
        505               1.25         3056                   1          2
        606                1.5         3056                   1          2
        707               1.75         3056                   1          2
        808                  2         3056                   1          2

6 rows selected.

SQL>

  管理器中也包括了内存管理配置和顾问功能,位于“内存顾问”页面(顾问中心?内存顾问)

  点击“建议(Advice)”按钮显示“内存大小建议”屏幕,它包括了一个来自视图V$MEMORY_TARGET_ADVICE的图形显示界面。

阅读(939) | 评论(0) | 转发(0) |
0

上一篇:Oracle11 生成AWR报告

下一篇:Oracle备份

给主人留下些什么吧!~~