Oracle删除数据非常慢的问题及解决

2023-12-04 0 364
目录
  • Oracle删除数据非常慢
    • 问题描述
    • 处理流程
  • Oracle删除表中大量数据卡顿的解决
    • 正确姿势
  • 总结

    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文件

    查看执行删除过程中有哪个操作时间过长

    Oracle删除数据非常慢的问题及解决

    我发现的问题是在实行删除的过程中这个表有外键关联主表,会先查一遍这个表里有没有那个设备的记录,elapsed表示耗时

    解决办法,外键加索引,或者取消外键代码里维护外键。

    Oracle删除表中大量数据卡顿的解决

    首先,不要被标题误导,分两种情况。

    • 1. 删之前原表数据不要。
    • 2. 删之前保留原表数据。

    正确姿势

    oracle数据表有过万条数据后,删除数据就变的特别慢,有时甚至会卡死,所以在此分享一个小白操作,望对各位有帮助。

    删除前: 从原表创建新表,即:先把需要的某些数据导入到新表里,或者不加条件即要删除原表的所有数据,从原表创建临时表(新表)。(相当于原模原样拷贝一份原表)

    create table tempTable as select id,name from table1 where sj>to_date(\’2013-7-31 23:59:59\’,\’yyyy-mm-dd hh24:mi:ss\’);

    接着直接 drop 删除原表,把新表名称改为原表名称。到此结束,这样直接跳过删除原表因数据多造成卡死的现象节省时间。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持悠久资源。

    收藏 (0) 打赏

    感谢您的支持,我会继续努力的!

    打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
    点赞 (0)

    悠久资源 Oracle Oracle删除数据非常慢的问题及解决 https://www.u-9.cn/database/oracle/67376.html

    常见问题

    相关文章

    发表评论
    暂无评论
    官方客服团队

    为您解决烦忧 - 24小时在线 专业服务