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

Oracle 提高联接远程表的性能

ASKTOM 2020-01-23
284

问题描述

嗨,汤姆,

希望你做得很好!

我很高兴写这篇文章,以从您那里获得有价值的信息。我们的情况是加入多个远程表加入,以便将预期数据放入我们的架构中,但它需要更长的执行时间 (即5k记录-30秒)

在加入一个远程表时传递提示/* DRIVING_SITE(t)*/时,性能很好,但是在加入多个远程表时,我无法进行太多改进。

您能否请我们如何提高性能?

提前非常感谢!

SELECT lai.ari_rec_id
FROM   lsmv_aer_info@db_lnk lai,
       master_tab mc
WHERE  mc.ari_rec_id = lai.ari_rec_id
-- Execution time : 30 sec, record count : 5K

Plan
SELECT STATEMENT  ALL_ROWSCost: 1,654  Bytes: 99,880  Cardinality: 4,994    
 3 HASH JOIN  Cost: 1,654  Bytes: 99,880  Cardinality: 4,994   
  1 TABLE ACCESS FULL TABLE IRT_LAND_LSP.MASTER_CASE Cost: 5  Bytes: 35,000  Cardinality: 5,000  
  2 REMOTE REMOTE SERIAL_FROM_REMOTE LSMV_AER_INFO db_lnkCost: 1,636  Bytes: 32,953,518  Cardinality: 2,534,886  


Using Oracle Hint : DRIVING_SITE

SELECT /*+DRIVING_SITE(lai)*/
       lai.ari_rec_id
FROM   lsmv_aer_info@db_lnk lai,
       master_tab mc
WHERE  mc.ari_rec_id = lai.ari_rec_id
-- Execution time : 1 sec, record count : 5K

Explain Plan
SELECT STATEMENT REMOTE  ALL_ROWSCost: 5  Bytes: 69,916  Cardinality: 4,994    
 3 NESTED LOOPS  Cost: 5  Bytes: 69,916  Cardinality: 4,994   
  1 REMOTE REMOTE SERIAL_FROM_REMOTE MASTER_CASE !Cost: 4  Bytes: 35,000  Cardinality: 5,000  
  2 INDEX RANGE SCAN INDEX ABV_LSMV10B2_SND_DM.IDX_ARI_RECID_17 LSABVDEVCost: 1  Bytes: 7  Cardinality: 1  


问候,
Sai M

专家解答

通过数据库链接连接许多表时,通常会浪费大量时间通过网络传输行。

通过在子查询中将远程表连接在一起来避免这种情况。本地表也是如此。

然后加入这些子查询的结果。

例如:

with remote as (
  select /*+ no_merge */* from t1@rem
  join   t2@rem on ...
) , local as (
  select /*+ no_merge */* from local_t1
  join   local_t2 on ...
) 
  select * from remote
  join   local on ...


有关此的更多详细信息,请参阅此询问TOM Office Hours有关调整分布式查询的视频:


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

评论