概述
使用OMS迁移ORACLE到OB后,多需客户要求反向同步,OB侧新增变更要回流到ORACLE,以备后面可能的紧急回退。这里记录一些OB到ORACLE回流过程中的性能问题场景及处理方法。
场景1,无索引大表
现象:
对于ORACLE侧较大的无主键,无索引表,从ORACLE往OB迁移,增量同步(UPDATE,DELETE等操作)并未发现性能问题,反向同步(OB=>ORACLE),性能慢,延迟高。
原因:
1、由于无主键大的表,业务场景基本为批处理事务,单事务,单个或少量DML操作大量数据,OMS在回流时会按行拆分,单次处理,在ORACLE侧应用增量时表现在,每行同步一行一次全表扫,导致性能慢
2、ORACLE到OB同步为什么没问题?
OMS为了确保数据迁移的一致性,OMS 会在结构迁移、增量同步 DDL 步骤为目标端的对应表添加隐藏列,并基于隐藏列创建唯一索引,对应的列和索引将在正向切换步骤被自动移除。由于OMS自动在OB侧创建了唯一索引,所以不会产生性能问题。
处理方法:
ORACLE侧在发生回流性能问题的无索引表上找选择性好的列创建索引。但记录该表,在后续DDL变更时注意该问题。
场景2,事务回流按行拆分并行处理导致的ITL争用,死锁
现象:
部分热点批处理的表,在反向同步(OB=>ORACLE)时,性能慢,延迟高,同时可能报ORA-00060,发生死锁,ORACLE则观察大量并发会话UPDATE,等待enq: tx - allocate itl entry。
原因:
OMS对于源端的事务,会按行拆分后,转换为几十个SESSION并行处理,如源端批处理的数据根据业务规律,可以集中的一起,在ORACLE侧表现为单个或少量数据块上并发事务处理,会产生ITL需求量大,争用现象,如果该表上的数据块上ITL槽不多,需要分配新的ITL槽,由于该表频繁UPDATE,导致块上没有剩余空间分配新的ITL而等待。
处理方法:
如果表不是很大,可以增加表或索引的PCTFREE,INITRANS,然后move表,rebuild index使调整生效。
alter table owner.tabtest PCTFREE 20 INITRANS 100;




