zoukankan      html  css  js  c++  java
  • 如何在十分钟内插入1亿条记录到Oracle数据库?

    这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能。

     

    -- Create table

    create table TMP_TEST_CHAS_LEE

    (

    f01 VARCHAR2(20),

    f02 NUMBER(10) not null,

    f03 VARCHAR2(21),

    f04 VARCHAR2(21),

    f05 NUMBER,

    f06 NUMBER(20)

    );

     

    --创建一个临时表,用于提供序列号

    CREATE GLOBAL TEMPORARY table t_sequence_num(

    sequenceNum number(8) not null

    )

    ON COMMIT PRESERVE ROWS;

     

     

    --开始插入数据

     

    begin

    --先生成1万个序号

    delete from t_sequence_num;

    for i in 0..9999 loop

    insert into t_sequence_num(sequenceNum) values(i);

    end loop;

     

    --使用APPEND提示,每次1万条,进行数据插入

    for i in 1..10 loop

    insert /*+ append */ into TMP_TEST_CHAS_LEE

    (f01, f02, f03, f04, f05, f06)

    select

    8613800000000 + i * 10000 + t_sequence_num.sequencenum as MSISDN,

    '12106000',

    0,

    '20120312072000',

    '500231891000',

    null

    from t_sequence_num;

     

    --每批次必须要提交一次

    commit;

     

    end loop;

    end;

    /

     
    可以看出,这种方法的关键是使用了 APPEND 提示,也就是使用了 Direct Path Insert.
    效果非常惊人,上亿的数据,十分钟左右就搞定了,也就是说,每秒钟插入了超过10万条以上的记录。
     
    这个方法很简单,就是要利用 APPEND提示,方法就是需要有个序列表,来辅助数据生成。
     
    性能测试人员不用耗费大量的时间来等待测试数据生成了。
     
    需要注意的问题:
    1. 插入数据时,表上不要建立索引
    2. 可以在数据插入完毕后,通过 nologging 和 parallel 来创建索引
    3. 这里默认是1万条记录提交一次,可以改的更大,应该会更快
    4. APPEND方式插入数据后,必须要提交后才能对表进行其它操作
    5. 生成的数据的每个字段都是可以根据自己的需要灵活产生的
  • 相关阅读:
    码农自白:这样成为谷歌工程师
    Vim命令合集
    应该知道的Linux技巧
    在Ubuntu上建立Arm Linux 开发环境
    Linux 下socket通信终极指南(附TCP、UDP完整代码)
    Socket通信原理和实践
    用 gdb 调试 GCC 程序
    Quartz学习记录
    shiro学习记录(三)
    shiro学习记录(二)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317736.html
Copyright © 2011-2022 走看看