Oracle性能优化的学习笔记(转)

      数据库 2006-5-17 12:4
内存优化:
SGA包括三个部分组成。数据缓冲区、日志缓冲区及共享池

数据缓冲区:大小由DB_Cache_Size参数决定。select name,value from v$ parameter where name in('db_cache_size','db_block_size','shared_pool_size','sort_area_size');

select name value from v$ sysstat where name in ('db block gets','consistent gets','physical reads');
其中理想的情况:physical reads接近为0 也就是说数据全部来自数据缓冲区。
db block gets表示从内存读取数据 consistent gets表示读取一致性数据。

select child#,sleeps/gets ratio from v$ latch_children where name ='cache buffers lru chain';
可以检测到数据缓冲区是否有空闲,得到的空闲冲突比例应该接近0

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

共享池大小由参数shared_pool_size决定。在共享池里,SQL区比数据缓存消耗较大的内存区域。
select name ,bytes from v$ sgastat order by name;
select * from v$ sgastat where name = 'free memory';

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

排序区调整:
select name,value from v$ sysstat wehre name like '%sort%"; sorts(memory)表示内存排序量, sorts(disk)表示磁盘序量。
失败率 = sort(disks)/sorts(memory) ×100% 排序区的失败率不得小于5%,否则必须增加排序sort_area_size的大小,使得Oracle尽量使用内存排序。

磁盘IO的调整就是把数据文件放在多个不同的磁盘上。

减少了IO的操作次数就减少了CPU的需求。

下面是我一些实际操作的过程:

alter system db_cache_size=256000000 scope=spfile;
alter system open_cursors=800 scope=spfile;
alter system pga_aggregate_target=128000000 scope=spfile;

alter system sort_area_size=52428800 scope=spfile;
alter system sga_max_size=1024000000 scope=spfile;
alter system shared_pool_size=256000000 scope=spfile;

重启一下Oracle就可以了。注意这里配置的机器内存是4G。

原文转自:http://liubiqu.cnblogs.com/archive/2006/04/01/364087.html
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}