`

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。
  • 大小: 32 KB
分享到:
评论

相关推荐

    oracle 数据按主键删除慢问题的解决方法

    根据表主键id删除一条数据,在PL/SQL上执行commit后执行时间都大于5秒。!!! 问题分析: 需求是删除一个主表A,另有两个附表建有此表的主键ID的外键。删除A表的数据级联删除另两个表的关联数据。增删改查使用...

    指导学习oracle

    在这段代码中,我们首先创建了一个名为 `dumpy` 的表,其中包含三个字段:`id`(主键)、`name` 和 `rand`。接着,使用一个PL/SQL块来插入100万条随机数据,为了提高性能,每插入1000条数据就进行一次提交。 ##### ...

    处理group by 查询速度慢的问题.docx

    - `id`: varchar(36),主键; - `log_time`: bigint(20) unsigned,日志时间; - `device_id`: int(11),设备ID; - `stb_id`: int(11),STB ID; - `region_id`: int(11) unsigned,区域ID; - `product_id`: int...

    Oracle查询性能优化

    例如,“主键ID=?”这样的条件通常能够过滤掉大量无关记录,因此应将其放在WHERE子句的最后。 #### 二、SELECT子句中避免使用 ‘ * ’ **原则二:** 在SELECT子句中使用‘*’意味着返回所有列,这会导致ORACLE...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle 甲骨文 获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2...

    MySQL面试题,经典

    MyISAM 会在重启后从上次的最大值继续计数,而 InnoDB 则会记住最后一次自增值,即使删除记录,重启后也会从这个值继续。 2. **MySQL 技术特点**:MySQL 提供多线程支持、多种客户端库、广泛的 API 和管理工具,...

    Mysql经典面试题答案

    - **问题描述**:如果一张表中有ID自增主键,在插入17条记录后删除了最后三条记录(即第15、16、17条),然后重启MySQL服务,再次插入一条记录时,该记录的ID会是18还是15? - **知识点**:MySQL的自增主键(AUTO_...

    MySchool数据

    - 参照完整性:保证引用的外键字段指向存在的记录,例如,如果有一个"Classes"表,"StudentList"中的"Class"字段应指向有效的班级ID。 - 用户定义的完整性:针对特定业务规则,比如年龄不能为负数。 5. 查询优化...

    mysql 面试题.pdf

    - 通过分析慢查询日志,可以找出性能瓶颈并优化查询。 2. **MySQL中的复制(Replication)是怎样工作的?有什么配置选项?** - **复制** 是指在一个或多个从属服务器上复制主服务器上的数据。 - **配置选项** ...

    行业-65 假设没有任何索引,数据库是如何根据查询语句搜索数据的?l.rar

    在这种情况下,如果查询条件与该顺序相关,DBMS可以通过二分查找等算法来加速查找,但依然比有索引的情况慢很多。 4. **优化器策略**:即使没有索引,数据库查询优化器也会尝试找出执行查询的最有效方法。它可能会...

    Mybatis中使用updateBatch进行批量更新

    这种方式最大的问题就是效率问题,逐条更新,每次都会连接数据库,然后更新,再释放连接资源(虽然通过连接池可以将频繁连接数据的效率大大提高,抗不住数据量大),这中损耗在数据量较大的时候便会体现出效率问题。...

    jpivot学习总结.doc

    <jp:mondrianQuery dataSource="" id="query01" jdbcDriver="oracle.jdbc.driver.OracleDriver" jdbcUrl="jdbc:oracle:thin:ngykt/ngyktadmin@172.16.46.241:1521:orcl10" catalogUri="/WEB-INF/queries/feeSchema....

    MYSQL数据库

    此外,还可以通过慢查询日志分析性能瓶颈,调整查询语句或优化索引。 五、运维管理 1. 安全性:设置强密码策略,限制用户权限,定期更新和打补丁以防范安全风险。 2. 备份与恢复:定期备份数据库,使用mysqldump等...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。 Tomcat也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理...

Global site tag (gtag.js) - Google Analytics