oracle的sga

                                                               sga

   

SGA的管理

■有三种方式:

          ●8i:SGA的总大小由所有内存组件大小之和决定,不能直接定义SCA大小。对内部组件大小的修改必须在数据库重起                    后 才能生为,所以叫做SGA的静态管理。

          ●9i: SGA总大小由初始化参数SGA_ MAX SIZE确定,各个内存组件大小之和不能超过这个参数。在这个大小之下,                      SGA 各个内存组件可以在不重起数据库的情况下直接修改大小,所以叫做SGA的动态管理。

          ●10g:  SGA大小既可以像9i一样动态管理,也可以实施SGA的自动管理,只需要设置初始化参数SGA_ TARGET, SGA                       各个内存组件  三就可以由数据库自动设置大小,设置的依据来源于系统自动收集的统计信息

 

 ■在9i以后,SGA的内部组件大小可以动态调整,也可以由数据库自动管理,在设置内存大小的时候,分配的基本单位是粒            度(granule)。Granule是一段连续的虚拟内存,大小取决于SGA _MAX SIZE的大小

           ●如果SGA_ MAX _SIZE小于128M, Granule为4M, 否则Granule为16M

           ●各个内存组件分配大小必须是Granule的整倍数

           ●整个SGA最小不小于3个Granule大小

■9i中的规则如下:

       ●linux/unix
             SGA<=12BM granutle 4M

             SGA >128M granule 16M   

      ●Windows
            SGA<=128M granule 4M

            SGA >128M granule 8M

■10g中的分配规则为

        ● linuxunix

        ●Windows
            SGA<=1G granute 4M否则16M

shared pool

■用于存储:

   ◆最近执行的SQL 语句

   ◆最近使用的数据定义
■由两个与性能相关的部分组成:

   ◆库缓存
   ◆数据字典缓存
■由參数SHARED POOL SIZE决定大小

库缓存

■存储最近使用的SQL和PL/SQL语句的信息

■共享最常用的语句

■管理上遵循LRU规则

■包括两个部分:
   ◆共享SQL区

   ◆共享PLSQL区
■大小由Shared Pool的大小决定

数据字典缓存■存储在数据库中最近使用的定义
■包括数据文件,表,索引,列,用户,权限和其他的数据库对象
■在分析阶段,服务器进程查找数据字典去验证对象的名字以及是否是合法访问
■对于查询和DML语句,如果数据字典的信息在缓存中能够提高响应时间大小由Shared Pool的大小决定

SGA中关键的内存片段。特别是性能与扩展上。
是sqI.pl/sql程序进行语法分析,编译,执行的内存区域。
库lbrary cache数据字典data dictionary cache,控制结构control structure组成。shared pool. size 决定大小。10G以后自动管理。
过小导致latch争用,ora-0431 错误。Lbrarycache 争用与等待。
>alter system set flush shared pool命令可清除shared pool内存中信息与我们相关的就是lthrancrache 库缪油或sal语句绍油了
用户提交一个sq语可,通过PGA转建到SGA, oracle 对册可进行分析.

■如果以前执行过,则按照以前执行的计划执行,通常是软分析[soft parse|或快速软分析

    ◆通过PCA提交Sql语句>parse语句>soft parse->执行语句- >通过PCA输出

■如果没执行过,oracle 开始分析语句的语法,语义,按照优化器规则获得最佳执行计划,并在内存中保存这个语句与之对应    的执行计划等相关信息,便于下次快速调用。

   ◆通过PGA提交Sql语句parse语句hard parse→分析与得到优化方案[CBOor RB0|→根据优化方案制定执行计划》执行语句    ◆一-通过PGA输出

数据高速缓存区

■暂存从数据文件中获得的数据块的数据映像

■同样遵循LRU算法管理内存
■当再次需要操作这些数据时可以从内存中直接获取和更新,语句执行效率能够大幅度的提高
■初始化参数DB_ BLOCK SIZE决定了数据块的大小,这也是数据库I/O的最小单位
■数据高速缓存区由多个独立的子缓存池构成,可以独立的设置大小:
    ◆Default池  DB CACHE SIZE
    ◆Keep池  DB KEEP CACHE SIZERecycle池  

    ◆DB RECYCLE CACHE SIZE

■只有defualt池可以被sga自动管理

                                                                                                SQL

Buffer 

Cache

的大小

配置

 SELECT component,current_size,min_size FROM v$sga_dynamic_components;

 

使用

advice

来确认

buffer

cache

的大小

 alter system set dby cache_ size=20M scope=memory;
SELECT size_for_estimate "Cache Size(MB)",size_factor,buffers_for_estimate "Buffers",
estd_physical_read_factor est_read_factor,
estd_physical_reads estd_phy_red,
estd_physical_read_time est_phy_read_t FROM v$db_cache_advice
WHERE NAME='DEFAULT'AND block_size=(SELECT VALUE FROM v$parameter WHERE NAME='db_block_size');

在0LTP系统中,对于DB_CACHE_SIZE的设置,推荐配置是:

DB_CACHE_SIZE=SGA_MAX_SIZE/2~ SGA_MAX_SIZE*2/3

Block

状态

0,FREE, no valid block image

1,XCUR, a current mode block, exclusive to this instance

2, SCUR, a current mode block, shared with other instances

3,CR,a consistent read (stale) block image

4,READ, buffer is reserved for a block being read from disk

5, MREC, a block in media recovery mode

6,IREC, a block in instance (crash) recovery mode

select O.object_name,
decode(state,0,'free',1,'xcur',2,'scur',3,'cr',4,'read',5,'mrec',6,'irec',7,'write',8,'pi')state,count(*) blocks
from x$bh b,dba_objects O
where b.obj=O.data_object_id
group by O.object_name, state 
order by blocks desc;

 

lru_flag

LRU_ FLAG=2,表示lru链的冷端

LRU_ FLAG=8,表示在LRU链的热端

LRU_ FLAG=0,表示没有标识

select class,flag,state,1ru_f1ag from x$bh where dbarfil=1 and dbablk = 30;

pool



 
     

 

 

select decode (wbpd.bp_id,1,'keep',2,'recycle',3,'default',4,'2k pool',5,'4k pool',6,'8k pool',7,'16k pool8,',8,'32k pool',
'unknown') pool,bh.owner,bh.object_name object_name,count(1) numOfBuffers 
from x$kcbwds wds,x$kcbwbpd wbpd,
(select set_ds,x.addr,o.name object_name,u.name owner from sys.obj$ o,sys.user$ u, x$bh X 
where o.owner#=u.user# and o.dataobj#=x.obj and x.state!=0 and o.owner#!=0) bh
where wds.set_id >=wbpd.bp_lo_sid and wds.set_id<=wbpd.bp_hi_sid
and wbpd.bp_size!= 0 and wds.addr=bh.set_ds  --and object_name='T2'
group by decode (wbpd.bp_id,1,'keep',2,'recycle',3,'default',4,'2k pool',5,'4k pool',6,'8k pool',7,'16k pool8,',8,'32k pool',
'unknown'),bh.owner,bh.object_name
order by 1, 4,3,2;

SELECT obj object,dbarfil file#,dbablk block,tch touches
FROM x$bh WHERE
tch>10 ORDER BY tch desc

 

例,

10%

 

 

 

 

 

 

 

select 
decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),
3,'BEING USED',state) "BL0CK STATUS",
count(*) from x$bh
group by 
decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),
3,'BEING USED',state)

 

最浪费

内存的

前10个

语句占

所有语

句的比

例,建

议控制

在5%

以内

 

 

 

 

 

select sum(pct_bufgets) "Percent" from 
(select rank() over ( order by buffer_gets desc)
as rank_bufgets,to_char(100*ratio_to_report(buffer_gets)over (),'999.99')
pct_bufgets from v$sqlarea) where rank_bufgets<11;

  
  
  
  
  

 

 

重做日志缓冲区■暂存数据库中所有数据块的改变
■内存管理方法是FIFO
■重做日志被用于提供数据恢复功能
■暂存重做日志的目的是为了提高语句的执行速度
■大小由参数LOG_ BUFFER决定,但这个内存区不能动态调整大小
大池

■大池是系统全局区中可选的一个内存区
■主要在下面几种情况下使用:
    ◆共享服务器的用户全局区(UGA)
    ◆使用RMAN作 备份恢复-|并行进程  09
■大小由参数LARGE POOL SIZE决定,也可以动态改变大小

java池

■是系统全局区中一个可选内存区。

■用于Java程序的解析 和执行
■大小由参数JAVA POOL_ SIZE决定,也可以动态调整
■如果granule是4M, 默认是24M: 如果granule是16M, 默认大小是32M如果在数据库创建时选择了安装JVM组件,那么这     个池必须配置

   
   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤舞飘伶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值