排序内存不够导致IO操作频繁的调优

--找到当前进程的SID
select sid from v$mystat where rownum=1;


--查看执行目标语句之前的PGA/UGA使用情况, Direct temp使用情况。Direct temp使用次数多的话,说明对临时文件读取频繁

select * from v$statname a,v$sesstat b
where a.statistic#=b.statistic#
and b.sid=52
and (a.name like '%ga memory%' or a.name like '%direct temp%')


--记录当前的结果,然后执行目标语句

select * from ra_customer_trx_all order by creation_date desc


--然后在此查看内存使用语句

select * from v$statname a,v$sesstat b
where a.statistic#=b.statistic#
and b.sid=52
and (a.name like '%ga memory%' or a.name like '%direct temp%')


--观测结果, 如果"physical reads/writes direct temporary tablespace"使用次数很大,那么就采取增加pga的方式,然后再次调试

SQL>show parameters sort_area_size;
SQL>alter session set sort_area_size=1074741800   --1G
SQL>show parameters sort_area_size;

--再次执行排序语句,以及查看结果

-----------------------------------------------------------------


当然,还有更加不错的选择,让数据库系统自动把握,在合适的时间使用合适的内存

show parameter workarea_size_policy;   -- 需要设置为auto

show parameter pga_aggregate_target;   -- PGA使用的总内存

show parameter memory_target;   -- 或者是SGA和PGA的总量  2G

你可能感兴趣的:(IO)