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
转载于:https://www.cnblogs.com/smallrock/p/4129085.html
Oracle通过主键id删除记录很慢相关推荐
- oracle和mybatis自增,在Springboot项目中使用MybatisPlus和Oracle实现主键ID的自增
在Springboot项目中使用MybatisPlus和Oracle实现主键ID的自增 发布时间:2020-11-18 15:49:35 来源:亿速云 阅读:125 作者:Leah 在Springbo ...
- Oracle添加主键、删除主键、修改主键
一.前提 主键解释: 一个表的唯一关键字 比如一个学生表 学号不能重复且唯一 ,学号就是关键字,即为主键. 区别于外键: 外键就是跟其他表联系的字段 ,还是比如有一张学生表 还有一张选课表,这个时候要 ...
- oracle 主键_mysql 组合索引带主键ID的问题
场景: mysql 5.7 某表 t_apply_info 上的2个索引,一个组合索引带了 主键字段 ID,另一个是同字段的单列索引 例如: KEY idx_1 (apply_serial_no,id ...
- oracle联合主键删除,oracle数据库删除联合主键
1.not null 非空约束 ①强制列不接受空值 ②例:创建表时,name varchar(6) not null, 2.unique 唯一性约束 ①约束唯一标识数据库表中的每条记录 ②unique ...
- Oracle使用序列触发器实现主键id自动增长
记录一下oracle中的字段自增问题 在mysql中我们可以使用auto_increment来实现自动增长功能 而在oracle主键没有自动增长类型,所以一般使用序列产生的值作为某张表的主键,实现主键 ...
- mybatis添加记录时返回主键id
参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作. 在使用mybatis作为ORM组件时,可以很方便地达到这 ...
- oracle主键约束删除,oracle删除主键查看主键约束及创建联合主键
oracle删除主键查看主键约束及创建联合主键 1,主键的删除 ALTER TABLE TABLENAME DROP PRIMARY_KEY 执行上面的SQL可以删除主键:如果不成功可以用 ALTER ...
- python 类 实例id递增_Python Django 模板类中 系统默认的主键ID自增,不会随着模板实例的删除而重置问题...
题目描述 在django中创建两个模板实例后,删除后重新再创建一个模板实例后它的主键ID从3开始这是为什么? 怎样解决这个问题? 相关代码 modeles类: from django.db impor ...
- Sql 插入记录返回主键id
有时候,我们的主键id是自动生成的,然后想要插入记录后,就取得这条记录的id,怎么做呢? 比如我现在的一个student表的字段为:id(PK autoIncrement), name, school ...
最新文章
- UMeditor使用
- word文档如何画线条流程图_如何将Word文档拆分成多个文件?
- MATLAB table数据结构 首篇
- boost::hana::partial用法的测试程序
- python开发Day05(计算器代码)
- mapreduce文本排序_MapReduce:通过数据密集型文本处理
- GIT上传下载报错:[You do not have permission to pull from the repository]的解决方案!
- dbms_random.seed
- 场景化支付的关键技术
- 文件与base64的互相转换操作
- 通达OA破解版下载|通达OA2015破解版 可用|通达oa2015破解补丁
- 计算机类中英附录,欧盟GMP附录11-计算机系统(中英文对照).pdf
- 如何用计算机做函数,office2010中如何利用公式或函数进行计算
- 【20211009】【数学基础】极值点、驻点、拐点的区别和联系
- javafx设置图片透明度(饱和度,亮度同理)
- 小成开发日记----python爬虫利用selenium实现无限刷不背单词app的酷币
- 艾艾贴常用的数据类型转换
- 四川大学计算机学院2016级毕业生,小猿分享 | 四年磨一剑:计算机学院2016级优秀毕业生高含宁专访...
- NoSql入门和概述
- SecureCRT scripting