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等待事件处理的主要内容,如果未能解决你的问题,请参考以下文章

oracle direct path read等待事件处理

oracle9i statspack 报告 分析 direct path read 等待事件

oracle direct path read等待事件处理案例

oracle direct path read等待事件处理案例

oracle direct path read等待事件处理案例

生产环境 direct path read 与log file sync等待事件问题处理