暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 通过dblink执行带有附加提示的单个插入并将其放入过程时的性能差异

ASKTOM 2021-06-12
403

问题描述

嗨,汤姆,
我有一个问题
我在2个不同的站点上有2个数据库,我的工作是在站点B上传输用户a调度程序作业,通过dblink_b2a从站点A提取数据。每天约1400万条记录
当我执行单个语句时:
    insert /*+ append */ into table_b 
      from select * from table_b@dblink_b2a
     where condition >= v_start_time
       and condition <  v_end_time
    ;

=> 持续时间约15-20分钟

但是,当我将其放入过程中并运行scheduler作业时,它运行非常缓慢〜15个小时,但尚未完成。
我的示例程序:
create or replace procedure transfer_Data 
as 
    v_start_time date := trunc(sysdate - 1);
    v_end_time   date := trunc(sysdate);
begin 
    insert /*+ append */ into table_b 
      from select * from table_b@dblink_b2a
     where condition >= v_start_time
       and condition <  v_end_time
    ;
end; 


请告诉我这种情况的原因和建议
希望你能尽快回复
谢谢您,并致以最诚挚的问候!

专家解答

你是怎么跑的

insert /*+ append */ into table_b 
      from select * from table_b@dblink_b2a
     where condition >= v_start_time
       and condition <  v_end_time    ;


直接在SQL?您是否为开始时间和结束时间使用了文字值?这是最有可能的区别。

但是由于PLSQL将大写任何SQL,因此您的库缓存中应该有两个SQL

-小写一-你从SQL运行的那个
-大写一个-您从PLSQL运行的那个

对于每一个,获取SQL_ID,然后使用DBMS_XPLAN获取执行计划。

这将告诉你计划是否不同 (这可以很容易地解释性能的差异)




文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论