È重要提示:
1、Oracle10g相对Oracle9i的一个重要进步是内存自动分配,就是一般不需要进行内存调整;
2、即使是Oracle9i,内存调整还是要慎重,必须是精通数据库的人员才能调整,建议有必要的话让用户联系数据库提供商进行优化。以免调整后数据库无法启动。
本部分主要介绍运行某系统,后台oracle数据库参数优化建议,在给出优化参数之前,先要理解oracle数据库系统的内存结构,如下图:
sga_max_size (如果只有Oracle服务,可以使用总内存35%到50%) |
pga_aggregate_target (350M-500M) |
Open_cursors (10000-30000) |
可能影响数据库性能的参数如下:
一般的规则是:sessions数=processes数*1.1+5,我们的推荐:
1、sessions数为335;
2、processes数为300;
3、Open_cursors数
推荐:10000-30000。目前武汉为20000,黑龙江为30000
4、sort_area_size (排序区大小)固定为5242880(5M)
对我们的系统来说,一般需要保证一个session至少能有1M的内存,
因此pga的推荐值是350M-500M
使用oracle的建议视图,协助进行PGA参数调整
下面语句可以帮助我们确定需要设定的内存大小:
select a.ESTD_PGA_CACHE_HIT_PERCENTAGE,
a.PGA_TARGET_FOR_ESTIMATE
from v$pga_target_advice a
where a.ESTD_PGA_CACHE_HIT_PERCENTAGE > 95
如果只有ORACLE应用服务,Sga的值可以设置为物理内存的50%
SGA_MAX_SIZE= DB_CACHE_SIZE + SHARED_POOL_SIZE
+ LARGE_POOL_SIZE + JAVA_POOL_SIZE
1、Db_cache_size
db_cache_size确定Oracle SGA中的数据库块缓冲的数量,并且代表着Oracle内存最重要的一个参数
Db_cache_size=sga_max_size*55%
检查数据缓存命中率。如果命中率在95%以下,通常必须增大DB_CACHE_SIZE的值,检查语句如下:
select sum(decode(name, 'physical reads', value, 0)) phys,
sum(decode(name, 'db block gets', value, 0)) gets,
sum(decode(name, 'consistent gets', value, 0)) con_gets,
(1 - sum(decode(name, 'physical reads', value, 0)) /
(sum(decode(name, 'db block gets', value, 0)) +
sum(decode(name, 'consistent gets', value, 0)))) * 100 hitratio
from v$sysstat
利用建议视图
select name,
SIZE_FOR_ESTIMATE,
size_factor,
ESTD_PHYSICAL_READS,
estd_physical_read_factor
from v$db_cache_advice
原则:
ESTD_PHYSICAL_READS越小越好。SIZE_FOR_ESTIMATE越大,ESTD_PHYSICAL_READS就越小。以SIZE_FOR_ESTIMATE的代价与ESTD_PHYSICAL_READS的大小为均衡
2、Shared_pool_size
shared_pool_size定义系统中由所有用户共享的池,包括SQL区域和数据字典缓存
Shared_pool_size=sga_max_size*30%
ü 保证数据字典缓存命中率高于95%。如果达不到这个值,通常需要增大SHARED_POOL_SIZE的大小。数据库刚启动时,这个命中率可能在85%左右
下面语句可以检查数据字典缓存命中率:
select ((1-(sum(getmisses)/(sum(gets)+sum(getmisses)))) * 100) "Hit Ratio"
from v$rowcache
where gets + getmisses <> 0
ü 保证库缓存命中率在95%以上;
下面语句可以检查库缓存命中率:
select sum(pins) "Hits",
sum(reloads) "Misses",
(sum(pins) / (sum(pins) + sum(reloads))) * 100 "Hit Ratio"
from v$librarycache
3、Java_pool_size
Java_pool_size是为JVM里使用的java存储过程所分配的内存
Java_pool_size 的推荐值为160M;
4、Large_pool_size
Large_pool_size是分配给大的PL/SQL的内存
Large_pool_size的推荐值为20M;
È重要提示:
参数、内存调整后,数据库启动之后,保证系统内存的利用率维持在75%-80%,如过高或者过低,再做适当微调。