执行计划的巨大差异

cuiht 2004-07-12 02:19:32
执行的语句如下:
INSERT /*+PARALLEL( A ,5)*/
INTO MASAKR.TB_KR_MID_MERGE_USER_MON a
SELECT /*+PARALLEL(A,7)*/ /*+PARALLEL(B,7)*/
V_DATE, NVL(B.USER_TYPE,A.USER_TYPE),NVL(B.USER_ID,A.USER_ID) ---- V_DATE 为日期变量
FROM MASAKR.TB_KR_TEMP_02_MERGE_USER_MON A
FULL OUTER JOIN MASAKR.TB_KR_TEMP_01_MERGE_USER_MON B
ON a.user_id =b.user_id ;
两种情况下的执行计划。
在SQLPLUS执行时执行计划是(1)
SQL: INSERT STATEMENT
VIEW
UNION-ALL
HASH JOIN (OUTER)
MASAKR.TB_KR_TEMP_02_MERGE_USER_MON (TABLE ACCESS FULL)
MASAKR.TB_KR_TEMP_01_MERGE_USER_MON (TABLE ACCESS FULL)
HASH JOIN (ANTI)
MASAKR.TB_KR_TEMP_01_MERGE_USER_MON (TABLE ACCESS FULL)
MASAKR.TB_KR_TEMP_02_MERGE_USER_MON (TABLE ACCESS FULL)
大约需要4分钟执行结束

但在后台调度时,其执行计划(2) 4个小时没出来结果。
SQL: INSERT STATEMENT
VIEW
UNION-ALL
HASH JOIN (OUTER)
MASAKR.TB_KR_TEMP_02_MERGE_USER_MON (TABLE ACCESS FULL)
MASAKR.TB_KR_TEMP_01_MERGE_USER_MON (TABLE ACCESS FULL)
FILTER
MASAKR.TB_KR_TEMP_01_MERGE_USER_MON (TABLE ACCESS FULL)
MASAKR.TB_KR_TEMP_02_MERGE_USER_MON (TABLE ACCESS FULL)
...全文
245 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuiht 2004-09-06
  • 打赏
  • 举报
回复
的确是ORA的BUG。
上述过程单进程没有任何问题,1000万 连接 900万的记录 4分钟就可结束。
若用子进程,就出现BUG,就是 HASH JOIN 在子进程中存在BUG
sunjet2000 2004-08-11
  • 打赏
  • 举报
回复
连接吗!权标扫描是不可以避免的!

我觉得可能不是bug当两个控制(如两个sql_plus)控制一个数据库表的时候,比如更改,插入操作,数据库会进行锁操作!也就是后进行的控制将长时间停滞!

希望楼主不要误会Oracle的好意!
daydayupliq 2004-08-10
  • 打赏
  • 举报
回复
楼主,最好把前后的过程写出来,与大家共享一下!
谢谢了~
dinya2003 2004-08-10
  • 打赏
  • 举报
回复
恭喜,最快乐的事莫过于自己解决问题.
smallcrocodile 2004-08-09
  • 打赏
  • 举报
回复
那就恭喜了
cuiht 2004-08-09
  • 打赏
  • 举报
回复
我找到原因了,是数据库9i的BUG。
jxc 2004-07-12
  • 打赏
  • 举报
回复
HASH JOIN (ANTI)
肯定快些,但为什么后台程序的执行计划不一样呢?
LGQDUCKY 2004-07-12
  • 打赏
  • 举报
回复
后台调度:是在那里执行?你的SQL语句全都是全表扫描
如果记录多的时候,想得到结果就很慢了

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧