新系统上线,10G 数据库负载持续高

讨论了Oracle 10g RAC环境中一个特定SQL查询的问题,该查询包含serial_number和carton_no两个条件。虽然两者都有索引,但carton_no字段大部分值为'N/A',导致即使使用了索引仍出现全表扫描的情况。
Oracle 10g  RAC,  3 NODES
Linux AS 5.3   64bit


最近新上线的程序或procedure中都会有类似下面SQL语句, 以前只有serial_number 字段条件,现在加上了carton_no ,
WIP_D_SN_MASTER  表有300万记录, serial_number及carton_no都有index, 但是serial_number 建立index没有任何
问题, 它的distinct 值很多, 但是carton_no 95% 的值是 'N/A' , 其他很少一部分才有值, procdure调用这个SQL, 传入
的参数同时赋给 serial_numbe 及carton_no ,  我们测试代入 serial_number 的真实值, 可以走serial_number 的index ,
下面是我们在OEM中抓到的对应的这个语句,可惜参数只是 :V00001 及 :V00002 ,  按照procedure写法,这两个参数值是
一样的, 但是看到的这个SQL的执行计划却是full table scan 。



AWR报告中也报这个语句执行需要 1 秒,但是我们手工代入serial_number 值,运行非常快 ,只需要几十毫秒 。 奇怪了。


SELECT BATCH_NO, WIP_D_SN_MASTER.ROWID FROM WIP_D_SN_MASTER  
WHERE (SERIAL_NUMBER = :V00001 OR CARTON_NO = :V00002) AND ROWNUM = 1  ;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-627229/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-627229/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值