问题描述:

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

转载于:https://www.cnblogs.com/smallrock/p/4129085.html

Oracle通过主键id删除记录很慢相关推荐

  1. oracle和mybatis自增,在Springboot项目中使用MybatisPlus和Oracle实现主键ID的自增

    在Springboot项目中使用MybatisPlus和Oracle实现主键ID的自增 发布时间:2020-11-18 15:49:35 来源:亿速云 阅读:125 作者:Leah 在Springbo ...

  2. Oracle添加主键、删除主键、修改主键

    一.前提 主键解释: 一个表的唯一关键字 比如一个学生表 学号不能重复且唯一 ,学号就是关键字,即为主键. 区别于外键: 外键就是跟其他表联系的字段 ,还是比如有一张学生表 还有一张选课表,这个时候要 ...

  3. oracle 主键_mysql 组合索引带主键ID的问题

    场景: mysql 5.7 某表 t_apply_info 上的2个索引,一个组合索引带了 主键字段 ID,另一个是同字段的单列索引 例如: KEY idx_1 (apply_serial_no,id ...

  4. oracle联合主键删除,oracle数据库删除联合主键

    1.not null 非空约束 ①强制列不接受空值 ②例:创建表时,name varchar(6) not null, 2.unique 唯一性约束 ①约束唯一标识数据库表中的每条记录 ②unique ...

  5. Oracle使用序列触发器实现主键id自动增长

    记录一下oracle中的字段自增问题 在mysql中我们可以使用auto_increment来实现自动增长功能 而在oracle主键没有自动增长类型,所以一般使用序列产生的值作为某张表的主键,实现主键 ...

  6. mybatis添加记录时返回主键id

    参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作. 在使用mybatis作为ORM组件时,可以很方便地达到这 ...

  7. oracle主键约束删除,oracle删除主键查看主键约束及创建联合主键

    oracle删除主键查看主键约束及创建联合主键 1,主键的删除 ALTER TABLE TABLENAME DROP PRIMARY_KEY 执行上面的SQL可以删除主键:如果不成功可以用 ALTER ...

  8. python 类 实例id递增_Python Django 模板类中 系统默认的主键ID自增,不会随着模板实例的删除而重置问题...

    题目描述 在django中创建两个模板实例后,删除后重新再创建一个模板实例后它的主键ID从3开始这是为什么? 怎样解决这个问题? 相关代码 modeles类: from django.db impor ...

  9. Sql 插入记录返回主键id

    有时候,我们的主键id是自动生成的,然后想要插入记录后,就取得这条记录的id,怎么做呢? 比如我现在的一个student表的字段为:id(PK autoIncrement), name, school ...

最新文章

  1. UMeditor使用
  2. word文档如何画线条流程图_如何将Word文档拆分成多个文件?
  3. MATLAB table数据结构 首篇
  4. boost::hana::partial用法的测试程序
  5. python开发Day05(计算器代码)
  6. mapreduce文本排序_MapReduce:通过数据密集型文本处理
  7. GIT上传下载报错:[You do not have permission to pull from the repository]的解决方案!
  8. dbms_random.seed
  9. 场景化支付的关键技术
  10. 文件与base64的互相转换操作
  11. 通达OA破解版下载|通达OA2015破解版 可用|通达oa2015破解补丁
  12. 计算机类中英附录,欧盟GMP附录11-计算机系统(中英文对照).pdf
  13. 如何用计算机做函数,office2010中如何利用公式或函数进行计算
  14. 【20211009】【数学基础】极值点、驻点、拐点的区别和联系
  15. javafx设置图片透明度(饱和度,亮度同理)
  16. 小成开发日记----python爬虫利用selenium实现无限刷不背单词app的酷币
  17. 艾艾贴常用的数据类型转换
  18. 四川大学计算机学院2016级毕业生,小猿分享 | 四年磨一剑:计算机学院2016级优秀毕业生高含宁专访...
  19. NoSql入门和概述
  20. SecureCRT scripting

热门文章

  1. ios 导航栏(自己定义和使用系统方式)
  2. flexbox 伸缩布局
  3. Excel工作表密码保护的破解
  4. struts2中改变struts.xml默认路径
  5. Lua面向对象利用metamethod重载运算符
  6. ogg 故障解决一则
  7. Java并发编程—AQS原理分析
  8. (三)用docker-compose部署postgres+ postgis
  9. 使用ajax+php+mysql实现数据库定时刷新
  10. Java面试题集(二)list与Map相关知识(1.2)