在一次上线升级后发现业务异常,一个查询接口不能用了,定位发现数据库异常,排查后惊奇的发现Oracle数据库的cpu使用率竟然达到了100%!再回头看这次改动的脚本,只有一个物化视图的重建而已。因为源库的表新加了一个字段,所以需要把本地数据库原物化视图删掉重建:
drop materialize view mv_wlf_charge; drop table mv_wlf_charge; create table mv_wlf_charge as select "t_wlf_charge"."id" "id", "t_wlf_charge"."code" "code" from t_wlf_charge@DBLINK_WLF; create materialize view mv_wlf_charge on public table refresh fast on demand start with to_date('09-02-2017 21:09:00', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1/144 as select "t_wlf_charge"."id","t_wlf_charge"."code" from "t_wlf_charge".DBLINK_WLF "t_wlf_charge";
因为物化视图创建后会生成一个同名的表,所以这里的脚本也操作了该表。但因为mv_wlf_charge表是个大表,接口调用量大,导致该表查询非常频繁,所以数据库立马就hold 不住了。其实原来被drop的物化视图是有索引的,这一重建把索引整没了。重新对mv_wlf_charge表建索引就可以了,它相当于就对物化视图建了索引。