http://litterbaby.itpub.net/post/16841/276327

DELETE大批量数据的性能优化

问题的提出:

一个表有上千万的数据,欲从该表中删除部分数据;

在线用的生产库,不能影响生产;

该表有四个索引,删除的sql语句用到了索引;

正常业务不能停止-不能disable约束,也不能临时不用索引;

问题的解决:

这个问题中应该重点考虑的问题是这个系统是生产系统,不能离线,所以只能是根据情况考虑一些在线的删除方式。

1、 如果是定期清楚历史数据的话,可以考虑用partition的方式,采用分区方式是其优点之一,能够使用其易于管理的一个方面,在这里是不是应该考虑分区时候是采用我们需要删除的数据为分区的原则。

2、 增大回滚段,通过设置使用这个回滚段,来提高系统的删除操作的速度,但是对于Oracle9i以后的系统来说,由于使用了自动管理回滚段的情况,如何进行回滚段的设置。

3、 增大redo log在线文件的大小,以便减少checkpoint的执行频率,增大buffer来提高删除的速度。这个主要目的是减少系统checkpoint的次数,尽量少减少磁盘IO的次数,能够在数据缓存上执行的尽量在内存中实现。

4、 使用rowid来删除数据。

1.根据用户所提需求过滤需要删除的源数据,create 临时表 as select rowid rid from 需要删除的表 where 删除条件。

2.使用pl/sql block来删除数据,这样能保证及时递交,防止lock过多的行导致系统负载增加。这里需要注意commit的频率,一般为更新100条记录commit一次。

create table temp_del表名_040803 as

select rowid rid from 要删除的表 where ......

declare

execrow number;

begin

execrow:=1;

for i in 1..需要更新的记录数/100(取整) loop

delete 要删除的表

where rowid in(select rid from temp_del表名_040803 where rownum<100);

delete from temp_del表名_040803 where rownum<100;

commit;

end loop;

end;

/

记得再建一张临时表保存要删除的内容已备回滚。这样根据rowid来删除的话效率会比较高。

5、 在Oracle 9i之后,可以考虑使用bulk delete的新功能。(这个没有高清楚是什么东西)

6、 如果在不是生产库的时候,如果索引没有在删除时使用的情况下,(如果在删除的语句中使用了索引得话,这样能够提高删除的速度)可以将索引删除,等执行完删除语句的时候,可以考虑重建索引,因为删除索引上的数据的时候也是需要时间和系统消耗的,这时候需要看看你所要删除的数据量的多少,如果数据量相对整个表比较大的时候,可以考虑使用全表扫描,这样应该是更快的方式,如果比率比较小的时候,使用索引找到rowid来删除应该是比较好的选择。

7、 有人提出这样的观点:

相关问题,俺们也经常遇到,共享经验如下:

1.表分区异常重要

2.索引过多很是麻烦

3.相关约束更是头痛(4M数据如果有N个子表对其参照,乖乖..)

4.表空间如过是dictionary管理,必须选择分段批量提交(俺们的数据库都被锁死了)

5.会滚、排序,大redo,多个arch线程,必须养成习惯,任何大数据量批量操作,都不可少。

6.临时表(在临时表空间上)用于查询果然较快。

7.引用偶像的话“Delete就是慢,就是慢,就是慢.”,没办法。

最后还是想说,象这样的工作只有考虑应用的特征,才会找到比较好的方法(俺觉得)

问题:表空间如过是dictionary管理,必须选择分段批量提交(俺们的数据库都被锁死了),为什么是这样的?

==========================

http://www.oracle.com.cn/viewthread.php?tid=26214&extra=&page=1

======================

http://blog.csdn.net/lunar2000/archive/2005/06/27/404090.aspx

========================

DELETE大批量数据的性能优化相关推荐

  1. mysql 大量写入 优化_MYSQL大批量写入之性能优化

    大家提到Mysql的性能优化都是注重于优化sql以及索引来提升查询性能,大多数产品或者网站面临的更多的高并发数据读取问题.然而在大量写入数据场景该如  何优化呢? 今天这里主要给大家介绍,在有大量写入 ...

  2. 数据蒋堂 | 性能优化是个手艺活

    作者:蒋步星 来源:数据蒋堂 本文共1400字,建议阅读8分钟. 大数据的技术本质就是高性能,性能优化也是程序员们的永恒话题. 大数据的技术本质就是高性能,性能优化也是程序员们的永恒话题. 这里说的性 ...

  3. 数据库:MySQL大批量SQL插入性能优化

    对于一些数据量较大的数据库系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意 ...

  4. 数据库大批量SQL插入性能优化

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. ...

  5. mysql 查找相似数据_MySQL性能优化做得好的人,都懂的索引绝技

    一步一步推导出 MySQL索引的底层数据结构. MySQL作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是 MySQL数据的存储形式以及索引的设计,决定了 MySQL ...

  6. iMobile中三维数据的性能优化

    作者:xinxin 目前,很多项目都用SuperMap iMobile for Android产品来实现展示三维数据效果,但由于三维数据对硬件设备要求高,而移动端设备的硬件远不如PC端,所以想要在iM ...

  7. 【ELT.ZIP】OpenHarmony啃论文俱乐部——大数据框架性能优化系统

    本文出自ELT.ZIP团队,ELT<=>Elite(精英),.ZIP为压缩格式,ELT.ZIP即压缩精英. 成员: 上海工程技术大学大二在校生 合肥师范学院大二在校生 清华大学大二在校生 ...

  8. 分布式实时分析数据库citus数据插入性能优化

    前言 从可靠性和使用便利性来讲单机RDBMS完胜N多各类数据库,但当数据量到了一定量之后,又不得不寻求分布式,列存储等等解决方案.citus是基于PostgreSQL的分布式实时分析解决方案,由于其只 ...

  9. [转]MySQL innoDB数据插入性能优化

    转载自: http://hiyijian.blog.163.com/blog/static/173086472201121621326471/ 起因:有一个innoDB引擎的表Table,在一个大概3 ...

最新文章

  1. 2018-4-15狼群算法以及改进的总结
  2. java 空指针异常(java.lang.NullPointerException)
  3. java十分钟速懂知识点——引用
  4. springmvc的执行流程_springmvc执行流程
  5. nginx代理配置根据ip地址来转发到不同的地址端口
  6. idea项目启动不起来_这些教育创业项目你还不知道吗,赶紧收藏起来吧!
  7. (连通图 ) Redundant Paths --POJ --3177
  8. Js Date对象 简单操作
  9. html里球是哪个单词,html tag是什么意思
  10. python字符串的美化_shell 下使用python 美化输出json
  11. c++ 数组(array)
  12. WiFi(网络)调试Android手机
  13. 系统集成管理师2011下半年软考透解 四
  14. git rebase之前需要 commit 才行
  15. EXCEL拆分单元格代码
  16. 通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法
  17. java计算机毕业设计高校心理测评管理系统源码+mysql数据库+系统+lw文档+部署
  18. 我想我是海 梦坠西子湖
  19. 控制台报错:Warning: Encountered two children with the same key, `xx`. Keys should be unique
  20. php tagcloud,WordPress函数:wp_tag_cloud(标签云)详解和举例

热门文章

  1. 利用一根同轴电缆互连主机构成以太网,则主机间的通信方式为( )
  2. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - F. 加法变乘法
  3. 657. Robot Return to Origin 机器人能否返回原点
  4. 378. Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
  5. 深度学习——02、深度学习入门——经典卷积神经网络架构实例——VGGNet
  6. 【MFC】自绘对话框动画效果的状态栏
  7. 【ARM】Tiny4412裸板编程之MMU封装
  8. 【STM32】 keil软件工具--configuration详解(下)
  9. Android快速开发系列 10个常用工具类
  10. sed是linux命令吗,Linux命令 sed