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

一 问题描述

收到短信告警,提示direct path read(110)。

直接路径读取不过SGA缓存,直接从磁盘上读数据,每次查询都会产生大量的物理读,导致IO比较高,影响数据库性能。

二 排查思路

生成AWR报告及ASH报告,查看相关内容。

2.1 生成ASH报告

2.1.1 生成ASH报告

执行以下命令,生成ASH报告:

@?/rdbms/admin/ashrpt.sql

2.1.2 查看ASH报告

2.2.2.1 查看Top Events

 可以看到direct path read占比63%。

2.2.2.2 查看该等待时间对应的sql

 2.2 生成AWR报告

2.2.1 生成AWR报告

@?/rdbms/admin/awrddrpt.sql

2.2.2 查看AWR报告

2.2.2.1 查看top sql

 

 可以看到AWR报告捕获到的sql和ASH报告捕获到的是同一个sql。

2.2.2.2 查看占用物理读比较多的对象

 

 可以看到上面那个慢sql所查询的表SC_TIMING占用了大量物理读。

2.3 优化捕获到的慢sql

2.3.1 查看执行计划

SELECT WORK_ORDER_NO FROM sc_timing WHERE PROCESS_STATUS = '02' AND PROCESS_USER = :1

AWR报告显示平均需要7秒,我自己试了下,是2.6秒。

#查看执行计划

执行set autotrace on;

执行该sql:

 可以看到该sql走了全表扫描,没走索引,很多物理读和逻辑读。

2.3.2 优化该sql

在重复值不高的查询条件上建索引:

CREATE INDEX eom.ind_process_user ON  eom.sc_timing(process_user);

再次查询,只需要0.09秒了。

建完索引后,再次查看执行计划,看到走索引了,物理读和逻辑读大大减少:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值