问题描述
嗨,汤姆,
我有一个问题
我在2个不同的站点上有2个数据库,我的工作是在站点B上传输用户a调度程序作业,通过dblink_b2a从站点A提取数据。每天约1400万条记录
当我执行单个语句时:
=> 持续时间约15-20分钟
但是,当我将其放入过程中并运行scheduler作业时,它运行非常缓慢〜15个小时,但尚未完成。
我的示例程序:
请告诉我这种情况的原因和建议
希望你能尽快回复
谢谢您,并致以最诚挚的问候!
我有一个问题
我在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; 请告诉我这种情况的原因和建议
希望你能尽快回复
谢谢您,并致以最诚挚的问候!
专家解答
你是怎么跑的
直接在SQL?您是否为开始时间和结束时间使用了文字值?这是最有可能的区别。
但是由于PLSQL将大写任何SQL,因此您的库缓存中应该有两个SQL
-小写一-你从SQL运行的那个
-大写一个-您从PLSQL运行的那个
对于每一个,获取SQL_ID,然后使用DBMS_XPLAN获取执行计划。
这将告诉你计划是否不同 (这可以很容易地解释性能的差异)
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




