概述
关于生产环境的一份awr报告分析,之前闲着无聊整理了100页,后面拆分下各个模块介绍下怎么看awr报告。
我们在看性能指标的时候,需要知道数据库出现性能问题,一般都在三个地方,io,内存,cpu,这三个又是息息相关的,当io负载增大时,肯定需要更多的内存来存放,同时也需要cpu花费更多的时间来过滤这些数据,相反,cpu时间花费多的话,有可能是解析sql语句,也可能是过滤太多的数据,到不一定是和io或内存有关系了 。
1. cpu:解析sql语句,尝试多个执行计划,最后生成一个数据库认为是比较好的执行计划,不一定是最优的,因为关联表太多的时候,数据库并不会穷举所有的执行计划,这会消耗太多的时间,oracle怎么就知道这条数据时你要,另一个就不是你要的呢,这是需要cpu来过滤的
2. 内存:sql语句和执行计划都需要在内存保留一段时间,还有取到的数据,根据lru算法也会尽量在内存中保留,在执行sql语句过程中,各种表之间的连接,排序等操作也要占用内存
3. io:如果需要的数据在内存中没有,则需要到磁盘中去取,就会用到物理io了,还有表之间的连接数据太多,以及排序等操作内存放不下的时候,也需要用到临时表空间,也就用到物理io了 。
下面先对awr报告的WORKLOAD REPOSITORY report 部分介绍。
DB Time不包括Oracle后台进程消耗的时间。如果DB Time远远小于Elapsed时间,说明数据库比较空闲。
db time= cpu time + wait time(不包含空闲等待) (非后台进程)
说白了就是db time就是记录的服务器花在数据库运算(非后台进程)和等待(非空闲等待)上的时间
DB time = cpu time + all of nonidle wait event time
在60分钟里(其间收集了1次快照数据),数据库耗时6253分钟,RDA数据中显示系统有240个逻辑CPU(16个物理CPU,每个8核),平均每个CPU耗时6253/240=26分钟,CPU利用率只有大约43.4%(26/60)。说明系统有一定压力。
在snapshot间隔中,总共约60分钟,240核cpu就共有240*60=14400分钟,DBtime 为6253分钟,则cpu花费了6253分钟在处理Oralce非空闲等待和运算上(比方逻辑读)
也就是说cpu有 6253/14400*100%=43.4% 花费在处理Oracle的操作上,这还不包括后台进程
总结:通过awr report的Elapsed time和DB Time就能大概了解db的负载,从而对数据库的性能有个整体把握,后面会分享更多awr报告的内容,关于awr如何导出在前面文章已经介绍过了,这里就不介绍了。
后面会分享更多DBA方面的内容,感兴趣的朋友可以关注下~