20200217-Oracle绑定变量导致SQL性能问题

在这里插入图片描述

版本:

DB : Oracle 11.2.0.1.0

问题现象:

客户反馈 销售订单保存 有时很慢。

问题分析:

问题重现后,查看后台数据库正在执行的SQL ,找到了引起操作慢的 SQL ,执行计划如下。
在这里插入图片描述
其中 SQL 中引用了临时表 ic_temp_atpdim0608 ,每次查询都使用同一个 SQL 文本, 重用同一个执行计划, 即使临时表数据每次差距特别大也会使用同一个执行计划,导致SQL 效率问题;实际上数据倾斜验证的列并不适合添加绑定变量。

解决方案:

去掉绑定变量,开发反馈不好修改;
临时解决办法,改写SQL ,需要在代码里将 这个耗时SQL 语句添加动态随机数的 HINT ,以避免执行计划重用,提高执行计划准确性;
例如:
原SQL:

select atptable.pk_group pk_group...... from ......;

更改后的SQL :

select /*+ 随机数*/ atptable.pk_group pk_group...... from ......;

可以使用类似如下方式增加随机数;

String sql="select /*+ "+new java.util.Random().nextDouble()+" */ col"

欢迎关注我的公众号:IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值