数据库优化报告

一、    性能现状

WIN2008服务器上,目前oracle数据库服务占用大量的IO时间,磁盘繁忙率100%,为了缓解现状,对数据库活动和SQL语句进行分析,下面是分析这个优化过程。


二、   优化分析

AWR报告分析:

1.png2.png3.png

分析:AWR报告来看,数据库消耗的等待时间主要是direct path read,这种等待事件是全表扫描导致的等待,从SQL层面分析,主要集中在sqlid7zfa0wc61scp9SQL,占用了数据库95%的数据库时间和逻辑读,目前主要对这个SQL进行分析优化。



SQL语句:

SELECT a.*, b.customerid

   FROM SPECIMENREPORT a, specimenhead b

where a.status =3

   and a.active ='1'

   and a.barcode = b.barcode

   and a.reportoption !=1

   andrownum<10

   and(selectcount(*)

          from specimenreportdetail h

         where h.specimenreportid = a.specimenreportid

           and h.status ='0')>0

   AND a.createdate >SYSDATE-60

unionall

SELECT c.*, d.customerid

   FROM SPECIMENREPORT c, specimenhead d, specimenheaddetail e

where c.status =3

   and c.active ='1'

   and c.barcode = d.barcode

   and c.reportoption =1

   and e.subbarcode = c.subbarcode

   and e.status >=130

   and e.status <=140

   andrownum<10

   AND c.createdate >SYSDATE60

执行计划:

4.png5.png


分析:可见该SQL语句,执行计划耗费COST49753,执行时间0.624秒,分析该SQL,由于该SQL是几个大表的关联查询,我们借助ORACLE的优化建议包进行分析:

记下sql_id直接调用下面PLSQL

Setserveroutput On

declare

tuning_taskvarchar2(30);

begin

tuning_task:=dbms_sqltune.create_tuning_task(sql_id => 7zfa0wc61scp9);

dbms_output.put_line(tuning_task);

end;

/

任务_20008

记下该任务名'任务_84'

执行调优包:

execdbms_sqltune.execute_tuning_task('任务_84');

通过查看user_advisor_tasks/dba_advisor_tasks视图可以查看优化任务的当前状态。

SELECTstatus FROM USER_ADVISOR_TASKS WHERE task_name = '任务_84';

查看调优报告:

SELECTDBMS_SQLTUNE.REPORT_TUNING_TASK('任务_84')FROM DUAL;


提炼优化报告具有价值的信息(其他的忽略):

1- SQLProfile Finding (see explain plans section below)

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

   为此语句找到了性能更好的执行计划 2。选择以下 SQL 概要文件之一进行实施。

   Recommendation (estimated benefit: 39.85%)

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

   - 考虑接受推荐的 SQL 概要文件。

    executedbms_sqltune.accept_sql_profile(task_name => '任务_84',task_owner=> 'SYS', replace => TRUE);                                       

2- IndexFinding (see explain plans section below)

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

   通过创建一个或多个索引可以改进此语句的执行计划。

   Recommendation (estimated benefit: 71.9%)

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

   - 考虑运行访问指导以改进物理方案设计或者创建推荐的索引。如果选择创建推荐的索引,请考虑删除索引

   "DRJYLIS"."IDX_SPECIMENREPORTID", 因为它是推荐的索引的前缀。

    create index DRJYLIS.IDX$$_00540001 on

DRJYLIS.SPECIMENREPORTDETAIL("SPECIMENREPORTID","STATUS");


分析:可见接收该概要文件(关于概要文件,是一种类似于统计信息的元数据,直接影响优化器对执行计划的判断)和创建索引,可提升50%以上的性能,注:如到迁移到其他环境,可只创建该索引进行优化,至于概要文件暂无需调整。

优化后观察该语句的执行计划和执行时间:

6.png7.png


分析:可见,经过索引与概要文件的优化后,该SQL语句的COST49753下降到23160,执行时间也由0.62下降到0.3以下,优化效果明显。


三、     优化总结

1.        本次优化主要是结合AWR报告定位性能问题的SQL语句进行优化,由于该SQL语句影响明显,占据了95%的数据库时间,故重点优化;

2.        利用调用oracle自带的sql_tunning包进行调优,发现出该语句较好的概要文件与索引优化思路;

3.        直接应用该概要文件于索引创建,从性能数据来看,数据库性能提升了一倍。


公司地址:广州市南沙区丰泽东路106号

公司官网:www.dbs-service.com

电话/微信:13926108245

QQ客服:282321952


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

企业微信号

微信扫一扫咨询

微信公众号

关注我们,定期优惠

立即
投稿
发表
评论
返回
顶部
展开