繁体   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