Oracle通过主键id删除记录很慢
问题描述:
Oracle通过主键id删除2000条记录很慢,需要花费十二分钟。
解决过程:
1.首先查看SQL的执行计划,执行计划正常,cost只有4,用到了主键索引。
2.查看等待事件,
select * from v$session_wait where sid = 507
显示的event是db file sequential read,也没有异常。
3.查看统计信息是否正常
select * from user_tables where table_name = '';
经检测,统计信息也是正常的。
4.查看系统IO,也是正常的。
5.找不到原因,开启SQL跟踪
alter session set events='10046 trace name context forever,level 12';
delete from t_table1 where id >= xxx
alter session set events='10046 trace name context off';
SQL跟踪得到一个trace文件
tkprof orcl_ora_3708.trc myoutput.txt
cat myoutput.txt,这次发现异常,文件里面除了有delete语句,还有两个select语句:
select /*+ all_rows */ count(1) from "xxx"."T_TABLE2" where "FRESHMANID" = :1 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 2000 0.23 0.22 0 0 0 0 Fetch 2000 720.58 740.36 842 61038000 0 2000 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4001 720.82 740.59 842 61038000 0 2000
select /*+ all_rows */ count(1) from "xxx"."T_TABLE3" where "FRESHMANID" = :1
call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 2000 0.27 0.27 0 0 0 0 Fetch 2000 1.84 1.93 0 136000 0 2000 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4001 2.11 2.20 0 136000 0 2000
这两张表各查询了2000次,可以判断出来,就是因为这个原因导致delete非常慢,询问现场相关人员,t_table2、t_table3跟t_table1有什么关系,现场人员说t_table2和t_table3个有一个外键
依赖t_table1的主键ID,经过查询,t_table2和t_table3的外键上都没有创建索引,于是创建索引,再执行delete语句,这次执行速度很快,经过SQL跟踪,也没有发现去查询t_table2和t_table3。
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-04/100702.htm
Oracle通过主键id删除记录很慢的更多相关文章
- oracle 实现主键id自增
公司现在项目数据库使用oracle,oracle实现表主键自增比mysql麻烦 mysql 在表主键auto_increment 打钩即可.oracle没有改属性,就相对麻烦.特此记录一下自增方法 测 ...
- mybatis添加记录时返回主键id
参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个 ...
- Mysql EF 触发器生成主键id 存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。刷新 ObjectStateManager 项 ;System.Data.Entity.Infrastructure.DbUpdateConcurrencyException
http://stackoverflow.com/questions/24725261/how-to-use-a-custom-identity-column-in-sql-with-entity-f ...
- Oracle 在函数或存储过程中执行一条插入语句并返回主键ID值
有时,我们需要往一张表插入一条记录,同时返回主键ID值. 假定主键ID的值都是通过对应表的SEQUENCE来获得,然后进行ID赋值 这里有几种情况需要注意: 1)如果建表语句含有主键ID的触发器,通过 ...
- 插入Oracle数据库后返回当前主键id
最近做一个spring版本3.0.4的老项目功能,应用场景要用到插入oracle表后返回主键ID拿来和其他表关联. 用oralce的可以一直用这种处理方式,高兼容低,搜索网上的资料都不能和这个Spri ...
- MyBatis插入记录时返回主键id的方法
有时候插入记录之后需要使用到插入记录的主键,通常是再查询一次来获取主键,但是MyBatis插入记录时可以设置成返回主键id,简化操作,方法大致有两种. 对应实体类: public class User ...
- MyBatis-plus 新增实例,主键ID从很大的数字开始
mybatis-plus是mybatis增强版,用mybatis-plus可以省去很多DAO层代码和数据库操作语句的编写.但是需要我们配置好条件. 情景: 向数据库新增一条实例,我们要调用 inser ...
- 自增长主键Id的另类设计
一.引言 在使用ORM框架时,一个表有一个主键是必须的,如果没有主键,就没有办法来唯一的更新一条记录.在Sql Server数据库和Mysql数据库设置自增长的主键是一件很轻松的事情,如果在Oracl ...
- 开启事务时mybatis返回主键id
先说一下没有注解的 先给出实体类: public class City { private int city_id; private String city_name; public int getC ...
随机推荐
- Unity-layermask的问题
using UnityEngine; using System.Collections; public class NewBehaviourScript : MonoBehaviour { priva ...
- 京东集团副总裁李大学:像CEO一样思考 - Dancen的专栏 - 博客频道 - CSDN.NET
京东集团副总裁李大学:像CEO一样思考 - Dancen的专栏 - 博客频道 - CSDN.NET 京东集团副总裁李大学:像CEO一样思考
- 003-python列表
Python 列表(list) 列表是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 列表的基本操作: 索引 切片 追 ...
- iOS-实现映客首页TabBar和滑动隐藏NavBar和TabBar
之前在做直播的时候,参照了映客App,发现其首页的效果还挺不错,在网上找了一下相关仿映客App代码和博客,大部分都是说如何播放直播流和推流,对于UI这块甚少,所以我自己花了点时间研究了一下映客的首页U ...
- JSP ---- 声明、表达式、脚本、注释
声明 在 JSP 页面中 , 可以声明一个或者多个合法的变量和方法 , 声明后的变量和方法可以在本 JSP 页面的任何位置使用 , 并将在 JSP 页面初始化时被初始化 语法格式如下 : <!% ...
- android 回车键事件编程
实现android按下回车键便隐藏输入键盘,有两种方法: 1.)如果布局是多个EditText,为每个EditText控件设置android:singleLine=”true”,弹出的软盘输入法中回车 ...
- ColorComboBox
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- Rebuild my Ubuntu 分类: ubuntu shell 2014-11-08 18:23 193人阅读 评论(0) 收藏
全盘格式化,重装了Ubuntu和Windows,记录一下重新配置Ubuntu过程. //build-essential sudo apt-get install build-essential sud ...
- [置顶] JQuery插件学习教程
这是JQuery其它常用插件的视频教程,包括validate插件,.comet插件等.同时有大量实例项目,如果你是喜欢JQuery的童鞋千万不要错过. 教程的内容有: 1_validate插件(1) ...
- Android中Style和Theme的使用
Style: Style是View中一些属性的集合,包括height,padding,font color,background等等,Style单独定义在xml文件中,类似与web页面中css的角色, ...