`
CharlesCui
  • 浏览: 427741 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle删除数据减少IO的方法

阅读更多
今天有个表有很多数据需要删除,DBA很忙,我就自己动手了

delete from crm_customer t where t.corporation_id in (xxx,xxx,xxx,xxx.......xxx);


运行后发现数据库的CPU都消耗在了IOWait上面,我还以为是别人也在用这台机器作压力测试呢,东打听西打听没发现问题,结果DBA一个电话打来,说删除数据要这么做:

begin
for i in 90000018 .. 90000151 loop
 delete from crm_customer t where t.corporation_id = i;
 commit; 
end loop;
end;


而我那样做要回滚的数据太多,IO要求很高。

哈哈,又学了一手
分享到:
评论
9 楼 hellas 2008-04-11  
抛出异常的爱 写道

我们DBA常说的表截断不知道是不是不用回滚内存?

不是
8 楼 xiaoych 2008-04-10  
个人感觉2楼的方法不错啊,呵呵
7 楼 抛出异常的爱 2008-04-09  

我们DBA常说的表截断不知道是不是不用回滚内存?
6 楼 Fenng 2008-04-09  
这个 DBA 告诉你的方法也一般,弄不好就出事情
5 楼 hellas 2008-04-07  
魔力猫咪 写道
in是不能使用索引的。你应该使用or。即id = ??? or id =???这样的方式。你的问题是因为没应用到索引造成全表扫描。DBA给出的问题是一旦一个删除失败,会造成事务不完整。把commit移出循环比较好。不过你这种情况能具体知道每个id,所以即使事务失败也没什么。不过别的情况下绝对不能这么用。不然造成数据不完整的化,你怎么维护。

in也是有可能用索引的,例如:
lubo@LUBO> drop table t;

Table dropped.

lubo@LUBO> create table t(x int);

Table created.

lubo@LUBO> create index i on t(x);

Index created.

lubo@LUBO> insert into t(x) values(1);

1 row created.

lubo@LUBO> insert into t(x) values(2);

1 row created.

lubo@LUBO> commit;

Commit complete.

lubo@LUBO> set autotrace on exp
lubo@LUBO> select * from t;

         X
----------
         1
         2


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'T'



lubo@LUBO> select * from t where x in (1,2);

         X
----------
         2
         1


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   CONCATENATION
   2    1     INDEX (RANGE SCAN) OF 'I' (NON-UNIQUE)
   3    1     INDEX (RANGE SCAN) OF 'I' (NON-UNIQUE)



lubo@LUBO>
4 楼 rkihabara 2008-04-04  
问题出在 in 上
3 楼 魔力猫咪 2008-04-03  
in是不能使用索引的。你应该使用or。即id = ??? or id =???这样的方式。你的问题是因为没应用到索引造成全表扫描。DBA给出的问题是一旦一个删除失败,会造成事务不完整。把commit移出循环比较好。不过你这种情况能具体知道每个id,所以即使事务失败也没什么。不过别的情况下绝对不能这么用。不然造成数据不完整的化,你怎么维护。
2 楼 hellas 2008-04-02  
删个一百多条记录有这么慢吗?估计是楼主没建索引吧。另外,那个dba推荐的做法实际是最不值得推荐的,oracle里面最不好的做法就是经常commit。
1 楼 buaawhl 2008-03-31  

不能这样用吗?

delete from crm_customer t
where
t.corporation_id >= 90000018
and t.corporation_id <= 90000151

相关推荐

    Oracle数据库优化之数据库磁盘IO

    4. 分布I/O减少磁盘竞争:将数据文件和redo log文件分开,Striping表数据,分开表和索引,减少与oracle无关的磁盘I/O。 5. 避免动态空间管理:在创建表或回滚段的数据库实体时,确定动态扩展,分配分区,避免回滚段...

    对oracle性能优化多种主要方法的总结

    若涉及到较少的删除数据操作,可将PCTUSED设为较高的值(60);若涉及到较多的删除操作,将PCTUSED设为较低的值(40)。 - 使用`TRUNCATE TABLE name`,删除其全部行的表,功能上与不带WHERE的DELETE语句相同(`...

    oracle系统内置包

    这些统计数据对数据库的性能优化至关重要,因为它们描述了系统硬件的特征,如单块读取时间、多块读取时间、CPU速度、系统最大吞吐量以及IO传送速度等。通过这些信息,数据库优化器能够选择出最佳的执行计划。 另外...

    Oracle11g Memory&Storage Overview

    1. OMF(Oracle Managed Files):OMF是Oracle11g中一个重要的管理特性,它允许数据库自动管理文件的创建、扩展和删除,极大地简化了数据库的存储管理。 2. ASM(Automatic Storage Management):ASM是Oracle11g...

    C#2005文件IO与数据存取秘诀-第七章

    - 追加模式:使用`File.AppendText`方法可以在文件末尾追加内容,而不会覆盖原有数据。 2. ADO.NET概述: - ADO.NET是.NET Framework的一部分,提供了一套全面的组件来访问各种数据库,如SQL Server、Oracle等。 ...

    Oracle存储过程编写及调优

    在设计存储过程时,目标是减少服务器资源的消耗,如CPU使用、IO次数和排序数量。尽量依赖Oracle的优化器,如Cost-Based Optimizer (CBO),它基于统计信息估算执行计划的成本。CBO是Oracle 10g及以后版本的默认优化器...

    基于Oracle的OLTP与OLAP数据库设计及实现

    OLTP系统侧重于日常的事务处理,如增加、删除、修改等,强调处理速度、数据一致性及系统稳定性。而OLAP系统则侧重于数据分析与决策支持,要求能高效地处理大量历史数据,并通过复杂查询提供信息给决策者。 文章...

    Oracle数据库10g极大提高可用性和网格计算能力.pptx

    闪回查询和闪回事务查询使得开发人员和数据库管理员能够查看历史数据状态,追踪和撤销错误操作,甚至可以恢复到删除或更新数据之前的状态,极大地减少了因人为错误造成的影响。 最后,Oracle 10g的快速恢复区(Fast...

    Oracle 11g 对非结构化数据的管理——Secure Files.pptx

    在 Oracle 11g 中,SecureFiles 作为 LOB(Large Object)的一种扩展,提供了更高的性能、更多的功能,比如透明加密、数据压缩和重复数据删除。 1. **性能提升**:SecureFiles 通过优化的流协议显著提升了读写性能...

    ORACLE9i_优化设计与系统调整

    §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1 数据文件 26 §1.2.2 控制文件 26 §1.2.3 重做日志文件 26 §1.2.4 其它支持文件 26 §...

    Oracle10G性能优化宝典

    合理设置日志文件大小和检查点时间间隔,可以提高日志处理速度,减少IO开销。 #### 使用回滚段 合理规划和使用回滚段,可以避免回滚段间的争用,提升事务处理效率。 #### 监控UNDO空间 UNDO表空间的监控和管理...

    oracle sql 优化

    2. **优化WHERE子句的连接顺序**:条件应从最能筛选出记录的开始,这样Oracle可以更快地减少处理的数据量。 3. **避免在SELECT子句中使用通配符'*'**:使用具体的列名代替'*',可以避免Oracle解析数据字典的额外...

    可用性和网格计算能力 oracle

    Oracle 10g还增强了端到端数据验证,通过H.A.R.D.(硬件辅助数据恢复)功能来预防在IO路径中产生的崩溃。HARD在Oracle 9iR2中首次推出,并在10g中得到改进,能对所有文件类型和块大小进行检查,确保数据在传输过程中...

    Oracle10G数据库恢复

    为了优化实例恢复效率,可以调整检查点频率,通过调整`log_checkpoint_internal`、`fast_start_io_target`和`fast_start_mttr_target`等参数,减少实例恢复时的前滚操作量。同时,启用并行恢复机制,通过设置`...

    Oracle数据库日常维护手册.pdf

    ##### 3.4 检查Oracle所有数据文件状态 - **命令**: `$ select file_id, tablespace_name, status, name from dba_data_files;` - **解释**: 查看所有数据文件的状态和位置。 - **注意事项**: 数据文件的状态应当...

    Oracle rac入门和提高.docx

    它通过Cache Fusion技术实现节点间的高速数据交换,减少了对磁盘I/O的依赖。 在高可用性方面,Oracle RAC提供了故障容错和无缝切换功能,当某个节点出现故障时,系统可以自动将工作负载转移到其他正常运行的节点,...

Global site tag (gtag.js) - Google Analytics