• 物化视图刷新慢--有可能是mv log被多个mv使用造成的


    同事说物化视图刷新慢,经检生产环境,发现部分物化视图刷新慢的原因是:由于同一个物化视图日志(mv log)被多个物化视图(mv)使用,不同的物化视图(mv)使用不同的刷新间隔,导致物化视图日志(mv log)中记录过多而使得快速刷新变得缓慢。

    具体查找过程如下:
    1.首先查询物化视图日志表
    select * from user_table t where t.table_name like 'MLOG%'
    这些MLOG$开头的表都是物化视图的日志表,换句话说这些基表每次发生改变的信息就记录在这个日志表中。

    2.查询物化视图日志表累积的数量
    如果是正常的快速刷新的物化视图,一般日志累积量不会超过太多。
    用下面的sql来查询物化视图日志表累积的数量
    select count(*) from MLOG$_XXXXXX;
    MLOG$_XXXXXX 代表第1步查询出来的表名。另外,MLOG$_XXXXXX的命名方式是MLOG$_+基表的名字
    可以把第1步查询出来的所有基表,挨个查询出count(*)来,一般来说几千以下是正常的,最正常的是为0,代表没有积累。
    因为快速刷新每次都是根据mv log中的记录来执行刷新的,很有可能基表不停的插入新数据,而物化视图不停的刷新,但是很有可能一个基表被很多个物化视图都在用,而mv log中的数据对于其他物化视图也是必须的,所以即使mv刷新了,但mv log中的记录数并不会减少,所以就导致物化视图刷新越来越慢。接下来,就需要查询一下这个基表到底被多少物化视图所用。

    3.查询基表上有多少个mv及其最新刷新时间
    select owner, name, snapshot_site, to_char(current_snapshots,'yyyy-mm-dd hh24:mi') current_snapshots
    FROM dba_registered_snapshots, dba_snapshot_logs
    WHERE dba_registered_snapshots.snapshot_id = dba_snapshot_logs.snapshot_id (+)
    AND dba_snapshot_logs.MASTER=upper('&table_name');
    其中table_name填写基表的名称。 

    PS:因为是内网环境,不太好截图,所以我就只列一个基表的数据。物化视图日志:MLOG$_XXX 的数据量为90多W(以查询的时候为准),而基于这个基表XXX创建的物化视图有17个之多。

    4.解决方案:
    首先将累积数据过多的物化视图日志查找出来,根据其命名规则查找到相应的基表,再根据第3步的sql把相应的物化视图查找出来,最后在系统不太繁忙的时候用手工刷新的方式去刷新这新物化视图( begin dbms_refresh.refresh("XXXXXX_VIEW"); end;)。另外,物化视图日志也存在高水位,也可以做move操作降低其高水位达到优化的目的。

  • 相关阅读:
    Hbase 0.98集群搭建的详细步骤
    java使用Apache POI操作excel文件
    linux下用非root用户重启导致ssh无法连接的问题
    solr update
    solr(一)
    libreoffice
    git
    hbase基本操作
    http://webapp.docx4java.org/OnlineDemo/PartsList.html
    git
  • 原文地址:https://www.cnblogs.com/nazeebodan/p/3927118.html
Copyright © 2020-2023  润新知