oracle direct path read等待事件处理
Posted 雅冰石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle direct path read等待事件处理相关的知识,希望对你有一定的参考价值。
一 问题描述
同事反馈某个系统缓慢,发现数据库服务器cpu使用率达到70%左右:
二 排查思路
通过AWR报告诊断数据库。
生成AWR报告命令:
@?/rdbms/admin/awrrpt.sql
2.1 查看数据库是否繁忙
发现数据库比较繁忙:
2.2 查看top等待事件
2.2.1 针对direct path read
当出现全表扫描时会判断表的大小,如果表过大,会使用直接路径读来获取数据。通过直接路径读的方式从存储中获取数据,由于没有SGA的缓存,每一次查询都会产生大量的物理读,最终导致io高;由于处理的速度慢,CPU又产生了大量的等待队列,所以DB time也非常高。
2.2.1.1 查看哪个对象的物理读比较多
发现cwgl.paybill占用了99%的物理读。
2.2.1.2 查看哪些sql的物理读比较多
发现大多是如下这个sql:
select * from cwgl.paylog where payid in(select distinct orderno from cwgl.paybill where orderno='WX16394924368608875287')
而且这个sql里有查询cwgl.paybill。
发现该表有1800万条数据:
走了全表扫描,耗费了12万个物理读,查询时长两分钟。
2.2.1.3 优化慢sql
--本篇文章主要参考了对于等待事件(direct path read)的理解_haojiubujian920416的博客-CSDN博客_direct path read等待事件
以上是关于oracle direct path read等待事件处理的主要内容,如果未能解决你的问题,请参考以下文章
oracle9i statspack 报告 分析 direct path read 等待事件
oracle direct path read等待事件处理案例
oracle direct path read等待事件处理案例