
版本:
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
649

被折叠的 条评论
为什么被折叠?



