|
在fuyuncat的个人站点上,有篇关于mlog$表的HWM过高导致性能问题的一个解决方案,在用物化视图进行快速刷新来同步数据的数据库中,这个问题是非常容易遇到的,特别在数据复制源端数据更新非常频繁的情况下。。。
fuyuncat的解决办法是:安排现场,将业务处理端的客户连接断开,然后停止快照端的刷新作业,手工刷新一次同步后,检查业务处理端的mlog$表,确保这些表为空,然后truncate table mlog$表,恢复同步作业,最后恢复业务处理端的客户连接。 这样做确实没有错,但如果在确实不能停应用的情况下,该如何解决这个问题呢?其实只要通过dbms_metadata.get_ddl抽取出mlog$_表的创建语法,就知道如何做了.这个表看起来象系统表,没有索引,其实是允许dba做一些DDL,DML等操作的,由于该表的HWM提高了,所以mlog$_xxx即使没有任何记录,全表扫描一次也是很慢的。。。 create table MLOG$_TEST ( ID VARCHAR2(32), SNAPTIME$$ DATE, DMLTYPE$$ VARCHAR2(1), OLD_NEW$$ VARCHAR2(1), CHANGE_VECTOR$$ RAW(255)) 为了不阻塞应用,可以用online redefinition的方式移动一下表;对于没有索引的表,另一种风险较大的办法,就是选择业务最少的时间直接alter table mlog$_test move,这样做虽然可能会对应用有一点阻塞,但只要存储的性能好,几百兆的mlog$_表能在十几秒内完成,基本上也不会有什么影响。。。
|