关于运行一段时间后sql变慢原因分析

突然某天接到某个接口执行变慢,调用超时的故障。

 

这个接口是一个存储过程,在前几天刚加入了新的sql进去。

通过断点这个存储过程,发现确实是卡在了这个新添加的sql中。

 

把sql扣出来,做oracle的执行计划分析,发现该用到索引的地方都用了,并且存储过程的效率看起来是不低的。

 

总结下现象:

某个sql运行了一段时间,在出问题之前,效率是没问题的,但是某天突然变慢,直接影响到了应用的执行效率,执行计划没问题,索引也没失效。

 

分析:

既然索引没问题,执行计划没问题,那么问题应该不在sql上。

通过后台分析,发现oracle执行该条语句的时候有两套执行计划,一套是走索引的,效率上没问题,一套是走全表扫描的,执行计划看起来也是没问题的,但是确实和走索引的是一样的的效率,明显是不正确的。

 

解决方法:

既然问题定位到了oracle中,那么目前就是让oracle强制使用索引了,此时需要用到oracle的hint

 

列出几个常用的:

/*+FULL(TABLE)*/

表明对表选择全局扫描的方法.

例如:

  SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO=’SCOTT’;

 

/*+INDEX(TABLE INDEX_NAME)*/

表明对表选择索引的扫描方法.

 

例如:

  SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX=’M';

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值