Oracle性能优化的学习笔记

内存优化:
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。

原文地址:https://www.cnblogs.com/liubiqu/p/364087.html