内存优化:
SGA包括三个部分组成。数据缓冲区、日志缓冲区及共享池

数据缓冲区:大小由DB_Cache_Size参数决定。

   
   
   
   
  1. select name,value from v$parameter 
  2. where name in('db_cache_size','db_block_size','shared_pool_size','sort_area_size'); 
   
   
   
   
  1. select name value from v$sysstat   
  2. where name in ('db block gets','consistent gets','physical reads');  

其中理想的情况:physical reads接近为0 也就是说数据全部来自数据缓冲区。
db block gets表示从内存读取数据  consistent gets表示读取一致性数据。

   
   
   
   
  1. select child#,sleeps/gets ratio from v$latch_children 
  2. where name ='cache buffers lru chain';  

可以检测到数据缓冲区是否有空闲,得到的空闲冲突比例应该接近0

数据缓冲区内存是否足够大,效率如何,可以通过计算命中率来确定。用磁盘物理读的数据与内在缓冲区的数据进行计算,就得出了命中率。一般要求在90%以上,否则必须增加数据缓冲区的大小。

共享池大小由参数shared_pool_size决定。在共享池里,SQL区比数据缓存消耗较大的内存区域。
 

   
   
   
   
  1. select name ,bytes from v$sgastat order by name;  
  2. select * from v$sgastat where name = 'free memory'

free memory是空闲内存,是共享池中可以使用的字节数,dictionary cache 是数据字典缓冲区,library cache是库缓冲区,sql area是SQL缓冲区。
空闲百分比 = (空闲内存/共享池字节数)×100% 如果小于20% 则应增大共享池参数Shared_Cache_size

转自:http://www.cnblogs.com/liubiqu/archive/2006/04/01/364087.html