Oracle物化视图之踩雷经验
由于这边的系统原因及元数据原因,同步数据都是通过物化视图的方式来执行的。因为数据不是特别的大,每天也就几十万的数据,而且数据到我们系统已经是很干净的,不必要在次的进行清洗,所以每天通过物化视图刷新数据是没有什么问题。
问题在于有一天新建物化视图,发现物化视图的创建SQL处理一直执行中的状态,无法执行成功。后来查了一下表的数据量,发现有一个多亿,就怀疑是数据量太大所以导致物化视图无法创建,其实物化视图创建就是一秒钟的事,但是当时想不到别的原因。数据又比较紧急,直接创建视图,没有建物化视图了。
小问题出现!
建视图后的2个月期间,都没用什么问题。后来发现这个视图用到的程序在每天跑批的时候越来越慢了,平时几分钟能跑完的,结果要花一个多小时。就是慢了一点,但是总归能跑完,也不没有造成数据延迟,就没有管了。后来担心系统性风险,就尝试了一个办法,就是把原来创建的视图改了个别名重新创建。结果居然奏效了,晚上调度跑数的时间和以前的一样了。虽然问题解决了,但是心中仍然觉得这是指标不治本的办法。
大问题出现!
过来几个星期,重复的问题出现了,这次涉及视图的程序直接卡死了!动不动了!直接导致了我们所有程序都停止了运行,这回是出大事了。全国分公司都在等着数据呢,领导急忙找过来,要求立马处理好!真的是被屌死了!
找到问题源头!
在细查的时候发现了一个物化视图,而这个物化视图用的数据源就是我上面卡死的视图的数据源!所以现在严重怀疑之前创建物化视图失败是由于这个数据源已经被用了,意思就是怀疑同一个数据源不能被重复创建物化视图。我把原来数据源的物化视图干掉,然后重新创建了原来创建不了的物化视图,果然!成功了!然后把数据刷了过来,再授权等一系列的操作。。这一次终于从源头上彻底的解决了这个问题。
DATE:20210629