簡體   English   中英

合並、分區和遠程數據庫 - 性能調優 Oracle

[英]Merge, Partition and Remote Database - Performance Tuning Oracle

我想調整我的合並查詢,它根據 SQL 服務器中的源表在 Oracle 中插入和更新表。 表大小約為 1.2 億行,通常每天插入/更新約 12 萬條記錄。 合並運行大約需要 1.5 小時。 它使用嵌套循環和主鍵索引來執行插入和更新。 源表中沒有記錄更新日期可供使用; 所以所有的記錄都會被比較。

Merge abc tgt
using
(
   select a,b,c
   from sourcetable@sqlserver_remote) src
  on (tgt.ref_id = src.ref_id)
when matched then 
update set 
      .......
where 
    decode(tgt.a, src.a,1,0) = 0
     or ......

when not matched then 
insert (....) values (.....);
commit;

由於表很大並且每天都在增長,因此我在 DEV 中根據 ref id(10 個組)對表進行了分區,並在 ref id 上創建了本地索引。 現在它使用 hash 連接和全表掃描,運行時間比現有進程長。 當我從本地索引更改為全局索引 (ref_id) 時,我使用嵌套循環,但運行時間仍然比現有進程長。

有沒有辦法對過程進行性能調整。

謝謝...

我會警惕通過數據庫鏈接加入/合並巨大的表。 我會嘗試復制完整的源表(例如,使用非原子 mview,可能已壓縮,可能已排序,當然只有您需要的列)。 收集統計信息后,我會將目標表與本地副本合並。 之后,可以截斷本地副本。

如果分區加速了從本地副本到目標表的合並,我不會感到驚訝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM