背景:某个类似准实时的数据分析系统,每15分钟从其他6个数据库中抽取五百张增量数据表,并进行15分钟粒度统计,同时有个前端门户进行查询。
该数据分析系统由数据抽取服务器、应用服务器、数据库服务器组成,全部为虚拟机环境。
问题:当数据抽取定期执行时,应用门户每个页面访问都极其缓慢,10分钟无法响应,甚至无法打开。
初步诊断:厂家一直认为是磁盘问题,甚至准备采用读写分离方式优化。
具体诊断:以数据来说话,以AWR报告为依据,评估和定位问题核心所在。
很久没研究Oracle了,最后正式使用Oracle还是2011年,也想趁此机会,把Oracle复习一下。
AWR是 Oracle 10g 版本推出的新特性,全称叫Automatic Workload Repository-自动负载信息库。
AWR 是通过对比两次快 照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分。
前文分析了Workload repository report for (负载信息库报告)、Report Summary(报告摘要)中的load profile和Instance Efficiency Percentages (Target 100%),接下来继续分析Top 10 Foreground Events by Total Wait Time、Wait Classes by Total Wait Time和Host CPU等等
关于Top 10 Foregrounds Events by Total Wait Time-按总等待时间列出的前十大事件
排序整理过以后的十大事件,红色部分为重点关注内容。
个人感觉值得关注的包括direct path read,db file sequential read,db file scattered read,library cache lock和log file sync。
direct path read 顾名思义直接路径读取,也就是全表扫描,等待最多,总时间也最多。
造成direct path read 的主要原因主要包括:
1、大量的磁盘排序操作,无法在排序区中完成排序,需要利用temp表空间进行排序.
2、大量的Hash Join操作,利用temp表空间保存hash区。
3、SQL语句的并行处理
4、大表的全表扫描,11g认为大表全表时使用直接路径读
db file sequential read的意思是,物理读发生在一个用户需要的数据块不在SGA,从而将其从磁盘读取到SGA中,其实和direct path read有点像。
db file sequential read一般发生在以下情况:
1、索引扫描
2、表扫描(access by rowid