`
foreversunyao
  • 浏览: 217194 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何加速Oracle大批量数据处理

    博客分类:
  • DB
阅读更多


一、           提高 DML 操作的办法:

简单说来:
1、暂停索引,更新后恢复. 避免在更新的过程中涉及到索引的重建.
2、批量更新,每更新一些记录后及时进行提交动作. 避免大量占用回滚段和或临时表空间.
3、创建一临时的大的表空间用来应对这些更新动作.

4 、批量更新,每更新一些记录后及时进行提交动作. 避免大量占用回滚段和或临时表空间.

5 、创建一临时的大的表空间用来应对这些更新动作.

6 、加大排序缓冲区
    alter session set sort_area_size=100000000;
    insert into tableb select * from tablea;
    commit;

如果UPDATE 的是索引字段,就会涉及到索引的重建,暂停索引不会提高多少的速度,反而有可能降低UPDATE 速度,
因为在更新是索引可以提高数据的查询速度,重建索引引起的速度降低影响不大。

ORACLE 优化修改参数最多也只能把性能提高15% ,大部分都是 SQL 语句的优化!

update 总体来说比insert 要慢 
几点建议:  
  1
、如果更新的数据量接近整个表,就不应该使用index 而应该采用全表扫描  
  2
、减少不必要的index ,因为update 表通常需要update index  
  3
、如果你的服务器有多个cpu ,采用parellel hint ,可以大幅度的提高效率
 
另外,建表的参数非常重要,对于更新非常频繁的表,建议加大PCTFREE 的值,以保证数据块中有足够的空间用于UPDATE , 从而降低CHAINED_ROWS 

二、        各种批量DML 操作:

1 )、oracle 批量拷贝:

set arraysize 20
        set copycommit 5000
        copy from
username/password@oraclename append table_name1
        using select * from table_name2;

     2 )、常规插入方式:

          insert into t1 select * from t;

           为了提高速度可以使用下面方法,来减少插入过程中产生的日志:

           alter table t1 nologging;

insert into t1 select * from t;

commit;

      (3)、CTAS方式:

            create table t1

as
select * from t;

为了提高速度可以使用下面方法,来减少插入过程中产生的日志,并且可以制定并行度:

create table t1 nologging parallel(degree 2) as select * from t;

     (4)、Direct-Path插入:

          insert /*+append*/ into t1 select * from t;

          commit;

          为了提高速度可以使用下面方法,来减少插入过程中产生的日志:

          alter table t1 nologging;

          insert /*+append*/ into t1 select * from t;

 

          Direct-Path插入特点:

1、          append 只在 insert … select … 中起作用,像 insert /*+ append */ into t values(…) 这类的语句是不起作用的。在 update delete 操作中, append 也不起作用。

2、 Direct-Path 会使数据库不记录直接路径导入的数据的重做日志,会对恢复带来麻烦。

3、 Direct-Path 直接在表段的高水位线以上的空白数据块中写数据,不会重用高水位线以下的空间,会对空间的使用造成一定的浪费,对查询的性能也会造成一定的影响。而常规插入会优先考虑使用高水位线之下有空闲空间存在的数据块。因此理论上 Direct-Path 插入会比常规插入速度更快,因为 Direct-Path 直接使用新数据块,而常规插入要遍历 freelist 获取可用空闲数据块,如果 nologging 配合,这种速度优势会更加明显。

4、 append 方式插入记录后,要执行 commit ,才能对表进行查询。否则会出现错误: ORA-12838: 无法在并行模式下修改之后读 / 修改对象。

5、 append 导入数据后,如果没有提交或者回滚,在其他会话中任何对该表的 DML 都会被阻塞(不会报错),但对该表的查询可以正常执行。

6、 在归档模式下,要把表设置为 nologging ,然后以 append 方式批量添加记录,才会显著减少 redo 数量。在非归档模式下,不必设置表的 nologging 属性,即可减少 redo 数量。如果表上有索引,则 append 方式批量添加记录,不会减少索引上产生的 redo 数量,索引上的 redo 数量可能比表的 redo 数量还要大。

7、 数据直接插入数据文件,绕过 buffer cache 并且忽略了引用完整性约束。

8、 不管表是否在 nologging 下,只要是 direct  insert ,就不会对数据内容生成 undo

9、 Oracle Direct-Path INSERT 操作末尾,对具有索引的表执行索引维护,这样就避免了在 drop 掉索引后,再 rebuild

10、        Direct-Path INSERT比常规的插入需要更多的空间。因为它将数据插入在高水位之上。并行插入非分区表需要更多的空间,因为它需要为每一个并行线程创建临时段。

11、        在插入期间,数据库在表上获得排他锁,用户不能在表上执行并行插入、更新或者删除操作,并行的索引创建和build也不被允许。但却可以并行查询,但查询返回的是插入之前的结果集

  (5)、并行DML:

     如果你的服务器有多个cpu ,采用parellel hint ,可以大幅度的提高效率
      ALTER SESSION ENABLE PARALLEL DML;

     INSERT /*+ PARALLEL (tableA, 2) */INTO tableA
     SELECT * FROM tableB;

     为了提高速度可以使用下面方法,来减少插入过程中产生的日志:

  INSERT /*+ PARALLEL (tableA, 2) */INTO tableA NOLOGGING
     SELECT * FROM tableB;

oracle 默认并不会打开PDML ,对DML 语句必须手工启用。即需要执行

alter table enable parallel dml 命令。

 

并行DML 特点:

1 、在并行DML模式中,默认的就是DIRECT-PATH插入,为了运行并行DML模式,必须满足以下条件:

a、必须是Oracle企业版;

b、必须在session中使并行DML生效,执行以下sql语句:

ALTER SESSION { ENABLE | FORCE } PARALLEL DML;

c、必须指定table的并行属性,在创建的时候或者其他时候,或者在insert操作时使用“PARALLEL”提示。

d、为了使Direct-Path Insert模式失效,在INSERT语句中指定“NOAPPEND”提示,覆盖并行DML模式。

    2 、并行Direct-Path INSERT到分区表:

       类似于serial Direct-Path INSERT,每个并行操作分配给一个或者多个分区,每个并行操作插入数据到各自的分区段的高水位标志之上,commit之后,用户就能看到更新的数据。

    3、并行Direct-Path INSERT到非分区表:

        每个并行执行分配一个新的临时段,并插入数据到临时段。当commit运行后,并行执行协调者合并新的临时段到主表段,用户就能看到更新的数据。

    4、Direct-Path INSERT可以使用Log或者不使用Log。

    5、另外不得不说的是,并行不是一个可扩展的特性,只有在数据仓库或作为DBA 等少数人的工具在批量数据操作时利于充分利用资源,而在OLTP 环境下使用并行需要非常谨慎。事实上PDML 还是有比较多的限制的,例如不支持触发器,引用约束,高级复制和分布式事务等特性,同时也会带来额外的空间占用,PDDL 样是如此。

分享到:
评论

相关推荐

    oracle大批量数据处理.ppt

    oracle大批量处理数

    oracle 数据仓库大批量数据处理技术.ppt

    总之,Oracle数据仓库的大批量数据处理技术涉及到分区策略的选择、性能优化、报表生成以及整体系统调优等多个层面。理解并有效利用这些技术,可以显著提高数据仓库的效率和可维护性,从而更好地支持企业的决策分析...

    oracle分区技术-大批量数据操作.ppt

    oracle分区技术-大批量数据操作,优化处理,大数据量的处理

    D:\Oracle大批量删除数据方法

    在Oracle数据库中,进行大批量数据删除是一项需要注意性能和安全性的任务。常见的方法包括使用DELETE语句、FOR ALL语句,以及通过存储过程实现分批删除。以下将详细阐述这些方法及其优缺点。 首先,最基本的删除...

    从SQLServer迁移大批量数据到Oracle

    ### 从 SQL Server 迁移大批量数据到 Oracle 在 IT 领域,数据库迁移是一项常见的任务,尤其是在企业级应用中。随着业务的发展和技术的进步,企业可能需要将现有的 SQL Server 数据库迁移到 Oracle 数据库。本文将...

    ORACLE大数据量处理技术PPT

    如题.货真价实 Oracle数据库高级技术交流 ---大批量数据处理技术

    java批量插入Oracle数据方法

    Java批量插入Oracle数据是一种高效的数据处理策略,尤其是在大数据量场景下。通过合理设计代码结构,利用`PreparedStatement`的批处理功能,可以显著提升数据插入的速度和系统的整体性能。在实践中,还需注意细节如...

    Oracle环境下根据条件大批量删除数据小程序

    在Oracle数据库环境中,根据特定条件大批量删除数据是一项常见的任务,尤其在数据清理或系统维护时。本小程序的目的是提供一种高效且可控的方式来执行这样的操作。以下是对这个"Oracle环境下根据条件大批量删除数据...

    Oracle中大批量删除数据的方法

    在Oracle数据库中,当需要处理大量数据的删除操作时,传统的单条DELETE语句可能会导致性能瓶颈,因为它们会锁定整个表或者大量的行,影响并发性能,并可能导致长时间的事务等待。为了解决这个问题,通常会采用分批...

    大批量数据自动移植方案的设计与开发——在不同版本、不同编码格式的Oracle数据库之间.pdf

    《大批量数据自动移植方案的设计与开发——在不同版本、不同编码格式的Oracle数据库之间》这篇文章探讨了在Oracle数据库之间进行大规模数据移植的自动化方法,特别是在处理不同版本和编码格式的挑战时。文章作者杨栋...

    oracle分区技术-大批量数据操作.pptx

    Oracle的分区技术是一种高效的数据管理策略,特别是在处理大数据量时,能够显著提升数据库的性能、可管理和可用性。分区的基本思想是将一个大的数据对象(如表或索引)分割成若干个小的物理段,根据分区字段的值将...

    Oracle 大数据量操作优化

    - 针对需要处理的大批量数据操作,可以专门创建一个临时的大表空间。这样做的好处是可以避免因数据量过大而导致的资源争抢问题,确保更新过程顺利进行。 - 示例命令: ``` alter session set sort_area_size=...

    oracle数据仓库解决方案

    8. **直接的路径装载API**:加速大批量数据导入过程。 9. **数据仓库的增强功能**:包括数据清洗、转换等功能。 10. **先进的查询技术与业务事件**:支持实时查询和事件处理。 11. **Oracle8i并行服务器改进**:增强...

    Oracle Parallel 并行处理

    并行INSERT尤其适用于大批量数据的加载,而并行UPDATE和DELETE则有助于大型数据表的快速修改。 #### 4. 并行DDL操作 除了查询和DML操作,Oracle还支持并行DDL(Data Definition Language)操作,如并行创建索引、...

    数据库大批量数据导入excle

    总之,数据库大批量数据导入Excel是一项涉及数据准备、选择合适的导入工具和策略、性能调优以及错误处理的复杂任务。通过合理规划和实施,我们可以高效、准确地完成这一过程,为数据分析和业务决策提供强有力的支持...

Global site tag (gtag.js) - Google Analytics