Oracle删除数据非常慢

记一次数据库删除数据非常慢的处理流程

问题描述:

单表数据3000条左右,根据主键删除需要509秒

处理流程

一. 首先查看SQL的执行计划:执行计划正常,cost只有1,用到了主键索引。
二. 查看等待事件:

SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;

先执行目标sql,在执行上面的sql获得sid

select * from v$session_wait where sid = (上面sql查询的sid)

显示的event是db file sequential read,也没有异常。

三. 测试其他其他表和系统io是否有问题,没问题则进行下一步
四. 追踪sql日志:

alter session set events='10046 trace name context forever,level 12';

delete from t_table1 where id = xxx(这里是目标sql)

alter session set events='10046 trace name context off';

若不知道日志文件存放位置执行以下sql会返回路径

SELECT VALUE  FROM V$PARAMETER WHERE NAME = 'user_dump_dest' 

找到最新的trace文件
执行—>tkprof orcl_ora_3708.trc myoutput.txt将trc文件转换为简单明了的txt文件
查看执行删除过程中有哪个操作时间过长

在这里插入图片描述
我发现的问题是在实行删除的过程中这个表有外键关联主表,会先查一遍这个表里有没有那个设备的记录,elapsed表示耗时
解决办法,外键加索引,或者取消外键代码里维护外键。

感谢:https://www.cnblogs.com/smallrock/p/4129085.html 提供的思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值