如何优化复杂的分布式查询



我的包中有一个使用远程DB链接的游标。我想优化包装的性能。所以我想从优化游标开始。

我将提供一些信息来分析,

  • 查询中没有本地表只有远程DB链接。
  • 游标查询使用6个远程DB链路并执行连接操作。
  • 所有的DBlinks指向同一个DB但是不同的表。
  • SELECT没有任何聚合操作,只有NVL少数列函数
  • 大约90列被选中
查询的结构是
SELECT (SOME 90 COLUMNS)
FROM    master1_all@db_one m1,
        master2_all@db_one m2,
        prey1@db_one pa,
        prey2@db_one pb,
        prey2@db_one pc,
        tbl_abc@db_one xa,
    (SELECT
      geo.country,
      geo.state
    FROM  tb_dest@db_one geo ) geo  WHERE ( m1.master_key = m2.master_key ) AND
    ( pc.weather_key = m2.cloud_key ) AND
( m1.order_type_id = pa.weather_key ) AND
( pa.weather_key = pb.weather_key ) AND
( m2.food_store_key = xa.food_store_key ) AND
( (nvl(m2.shop_key ,121)) = xa.store_key ) AND
( geo.country (+) = m1.country ) AND
(xa.food_type NOT IN ('COLD')) AND
( m2.food_type_code NOT IN ('WINTER')
    OR m2.price_per_portion !=0 ) AND
( ( m1.last_purchase_date >= TRUNC(SYSDATE-10) - 1/48 And m1.last_purchase_date <= TRUNC(SYSDATE) ) 
Or ( m2.last_purchase_date >= TRUNC(SYSDATE-10) - 1/48 And m2.last_purchase_date <= TRUNC(SYSDATE) ));

这不是实际的查询,但结构相似

首先试着找到你查询的瓶颈。如果问题仅在执行远程表的查询时出现您可以使用hint/*+ DRIVING_SITE(…)*/https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements006.htm#BABEGIJC, oracle将尝试在远程数据库

上执行。

最新更新