日期:2014-05-16  浏览次数:20441 次

oracle SGA PGA 内存大小调整

个人归纳总结:SGA 占用总数据库实例内存的30%左右,PGA占用到70%左右。

?

修改简单归纳为:

alter system set sga_max_size=XXXM from spfile;

alter system set sga_target=XXXM from spfile;

alter system set pga_aggregate_target=XXXM from spfile;

?

重启数据库。

在11GR2中修改了sga_max_size,从8G到2G没有生效。设置好PGA和SGA target参数后,oracle自动计算了sga_max_size为4G,不能低于4G.。

?

怎么修改也无法生效了。

?

?

转载自:http://log-cd.iteye.com/blog/562052

一、名词解释
(1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

(2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。? 共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。

(3)缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。

(4)大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。

(5)Java池:Java Pool为Java命令的语法分析提供服务。

(6)PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。

二、分析与调整
(1)系统全局域:
? SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。
a.共享池:
查看共享SQL区的使用率:

Sql代码 ?收藏代码
  1. select ( sum (pins-reloads))/ sum (pins)? "Library?cache" ? from ?v$librarycache; --动态性能表 ??


这个使用率应该在90%以上,否则需要增加共享池的大小。

查看数据字典缓冲区的使用率:

Sql代码 ?收藏代码
  1. select ?( sum (gets-getmisses-usage-fixed))/ sum (gets)? "Data?dictionary?cache" ? from ?v$rowcache; --动态性能表 ??


这个使用率也应该在90%以上,否则需要增加共享池的大小。

修改共享池的大小:

Sql代码 ?收藏代码
  1. ALTER ?SYSTEM? SET ?SHARED_POOL_SIZE?=?64M;??



b.缓冲区高速缓存:
查看数据库数据缓冲区的使用情况:

Sql代码 ?收藏代码
  1. SELECT ? name ,value? FROM ?v$sysstat? order ? by ? name ? WHERE ? name ? IN ( '' DB?BLOCK?GETS '' , '' CONSISTENT?GETS '' , '' PHYSICAL?READS '' );??


计算出来数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。