[英]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.