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

 更新时间:2023年02月15日 10:52:58   作者:YiFengLc  
这篇文章主要介绍了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文件

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

我发现的问题是在实行删除的过程中这个表有外键关联主表,会先查一遍这个表里有没有那个设备的记录,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 删除原表,把新表名称改为原表名称。到此结束,这样直接跳过删除原表因数据多造成卡死的现象节省时间。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • ORACLE 回收站当前状态查询整理

    ORACLE 回收站当前状态查询整理

    回收站(Recycle Bin)从原理上来说就是一个数据字典表,放置用户删除(drop)掉的数据库对象信息,接下来详细介绍下ORACLE 回收站方方面面感兴趣的你可以参考下哈
    2013-03-03
  • oracle数据库导入导出命令使用方法

    oracle数据库导入导出命令使用方法

    这篇文章主要介绍了oracle数据库导入导出命令格式,对单表导出、多张表导出的方法
    2013-11-11
  • oracle实现多行合并的方法

    oracle实现多行合并的方法

    这篇文章主要介绍了oracle实现多行合并的方法,实例讲述了oracle10g以后提供的函数WMSYS.WM_CONCAT的使用技巧,需要的朋友可以参考下
    2015-01-01
  • [Oracle] Data Guard 之 浅析Switchover与Failover

    [Oracle] Data Guard 之 浅析Switchover与Failover

    以下是对Oracle中Switchover与Failover的使用进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • Oracle多表级联更新详解

    Oracle多表级联更新详解

    我们在平时的工作中可能遇到过,多表级联更新,我也在网上看到过不少的方法,但是使用这些方法一般都没成功过,所以今天我给大家介绍一种稍微麻烦的方法,有需要的朋友可以参考下
    2013-07-07
  • oracle中sql%rowcount的作用详解

    oracle中sql%rowcount的作用详解

    这篇文章主要介绍了oracle中sql%rowcount的作用,sql%rowcount来判断是否更新了记录的状态,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Linux系统下Oracle数据库监听启动关闭命令详解

    Linux系统下Oracle数据库监听启动关闭命令详解

    现在很多朋友在学习linux下oracle 数据库的时候可能都发现了一个问题,oracle数据库的服务不能自动启动,这篇文章主要给大家介绍了关于Linux系统下Oracle数据库监听启动关闭命令的相关资料,需要的朋友可以参考下
    2024-01-01
  • oracle行转列方法集合汇总(推荐!)

    oracle行转列方法集合汇总(推荐!)

    工作中我们经常会碰到行转列的情况,下面这篇文章主要给大家介绍了关于oracle行转列方法集合的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Oracle中的table()函数使用

    Oracle中的table()函数使用

    这篇文章主要介绍了Oracle中的table()函数的使用,提高查询效率,利用table()函数,可接收输入参数,然后将pl/sql 返回的结果集代替table,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Oracle学习笔记之视图及索引的使用

    Oracle学习笔记之视图及索引的使用

    这篇文章主要介绍了Oracle学习笔记之视图及索引的使用,视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询
    2022-07-07

最新评论