今天一朋友说oracle11g生产库突然性能变得很差,已经把核心业务都停了,协助一起分析下数据库问题到底在哪,来吧!
分析思路如下:
了解最近变化情况
先了解最近有没有业务上线之类的变更,有没有硬件之类的调整,系统日志有没有报错,数据量是否有明显的变化,sql执行计划是否有偏差…
经沟通得知,主机存储磁盘前几天发生过故障,已经换好了新盘。
查看awr报告
说明:只有现在性能比较低的awr报告,没有性能正常时的awr报告,因此也无法对比分析。
查看数据库整体负载

服务器配置还可以,数据库整体负载不高。
查看top5前端等待事件

都是io类相关的等待。
查看SQL Statistics信息
SQL ordered by Elapsed Time

可以看到这些sql执行很耗时,而且时间主要花费在io上。
SQL ordered by User I/O Wait Time

根据 User I/O 等待时间排序的SQL,可以看到这些SQL都花费在io上。
查看Tablespace IO Stats

表空间的平均读达到了862.91ms,太高了吧!
查看File IO Stats

两个数据文件的平均读分别为361.79ms、476.52ms,太高了吧!
初步结论
应该是新换的盘有问题,需要检查新盘是否存在问题,测试读写性能、兼容性、多路径配置等。
最终处理
主机工程师确认新盘确实有问题,修复了磁盘,数据库性能恢复正常。
正常的awr报告如下:

查看Top 5 Timed Foreground Events

查看 SQL ordered by Elapsed Time

sql执行时间下降了很多,恢复了正常。
查看SQL ordered by Reads

和异常时间的报告相比,%io下降了很多。
查看Tablespace IO Stats

查看File IO Stats

表空间和数据文件的io平均读都恢复了正常。
至此,这个案例也就分析完成了,原因是数据盘有问题。
进一步优化建议
1、优化sql语句,减少全表扫描,降低物理读、逻辑读
2、有热表,考虑打散数据
3、内存使用率不高,调整内存参数,取消amm配置。
越分享越快乐,希望你我都学有所获,共同进步~~~
关于作者:
专注于Oracle、MySQL、PG、OpenGauss和国产数据库的研究,热爱生活,热衷于分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~




