背景说明
公司开发、测试、演示环境,三个环境的oracle服务器无论服务器是否空闲, CPU的占用率一直是100%, 一直也没有找到问题原因,今天就花了一整天时间研究这个问题。
通过AWR报告查看oracle运行情况
awr报告是oracle 10g下提供的一种性能收集和分析工具,它能提供一个时间段内整个系统资源使用情况的报告,通过这个报告,我们就可以了解一个系统的整个运行情况,这就像一个人全面的体检报告。
- sqlplus / as sysdba 链接数据库。执行下面的sql,可以替换时间范围,设定报告范围
select
snap_id,
dbid,
instance_number,
to_char(end_interval_time,'YYYY-MM-DD HH24:MI:SS')
from dba_hist_snapshot
where end_interval_time >=to_date('2020-12-18 09:00:00', 'yyyy-mm-dd hh24:mi:ss')
and end_interval_time <= to_date('2020-12-18 10:01:00', 'yyyy-mm-dd hh24:mi:ss')
order by end_interval_time ;
结果如下图
- 生成AWR报告。4个参数分别是步骤1中查询结果的DBID列,INSTANCE_NUMBER列,最后两个参数是SNAP_ID的开始和结束值。
select output from
table(dbms_workload_repository.awr_report_html(1660034318,1,2059,2062));
结果如下
- 将结果集复制到txt文档,再将后缀改成html即可打开查看
效果如下图:
4.分析报告发现,执行CPU占用率很高的sql, 是一个物化视图,物化视图相当于一张物理表, 物化视图会在创建时生成定时任务,定时刷新构建物化视图的sql。而这个sql非常复杂,而且很耗时,而这个物化视图执行周期为10分钟,可能10分钟不一定执行的玩,物化视图关联表很多,而且数据量达到了100W, 导致oracle进程的cpu占用率一直是100%