我有两个插入语句,几乎完全相同,它们在同一个Oracle实例上以两个不同的模式运行.insert语句看起来并不重要 - 我在这里寻找故障排除策略.
两种模式都有99%相同的结构.一些列的名称略有不同,除了它们是相同的.insert语句几乎完全相同.一个解释计划的成本为6,另一个的解释计划的成本为7.两个插入语句集中涉及的表具有完全相同的索引.已经为两个模式收集了统计数据.
一个insert语句在5秒内插入12,000条记录.
另一个insert语句在4分19秒内插入25,000条记录.
插入的记录数是正确的.执行时间的巨大差异让我感到困惑.鉴于解释计划中没有任何突出的问题,您将如何确定导致运行时间差异的原因?
(我在Windows机器上使用Oracle 10.2.0.4).
编辑:问题最终成为一个低效的查询计划,涉及笛卡尔合并,不需要这样做.明智地使用索引提示和散列连接提示解决了这个问题.现在需要10秒钟.Sql Trace/TKProf给了我方向,因为我向我展示了计划中每个步骤花了多少秒,以及生成了多少行.因此TKPROF告诉我: -
Rows Row Source Operation
------- ---------------------------------------------------
23690 NESTED LOOPS OUTER (cr=3310466 pr=17 pw=0 time=174881374 us)
23690 NESTED LOOPS (cr=3310464 pr=17 pw=0 time=174478629 us)
2160900 MERGE JOIN CARTESIAN (cr=102 pr=0 pw=0 time=6491451 us)
1470 TABLE ACCESS BY INDEX ROWID TBL1 (cr=57 pr=0 pw=0 time=23978 us)
8820 INDEX RANGE SCAN XIF5TBL1 (cr=16 pr=0 pw=0 time=8859 us)(object id 272041)
2160900 BUFFER SORT (cr=45 pr=0 pw=0 time=4334777 us)
1470 TABLE ACCESS …
Run Code Online (Sandbox Code Playgroud)