问题现象
同一个sql有两个执行计划,是否合理?
它的EXECUTIONS,ELAPSED_TIME等统计信息怎么看,是独立分开的还是统一计算的?
如下图:
问题影响版本
tpcc测试:23.2.1.100
问题的风险及影响
影响EXECUTIONS等sql统计信息的计算
问题发生原因
同一条sql,特别是绑定参数的sql,参数类型不同,会导致生成不同的执行计划。
分析及处理过程
例子测试分析
复现例子:
drop table if exists tmp2;
create table tmp2(c1 int,c2 double,c3 int,c4 int,c5 int,c6 int,c7 int,c8 timestamp,c9 varchar(500),c10 int) ;
如上,第二个参数是int和double时,生成了两个执行计划,有两个plan_hash_value,如下图:
后跑几次,发现其中executions、cpu_time这些值共享,统计到一起,所以两条结果的这些字段值一样。
缓存相关视图
经验分享
1、同一个sql,有多个执行计划,是正常现象
2、v$sql中的executions、cpu_times等一些统计字段,同一个sql都是同样的值,不能做加减等操作。