ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 海量数据处理_批量插入

海量数据处理_批量插入

原创 Linux操作系统 作者:redhouser 时间:2011-05-31 16:38:42 0 删除 编辑

大量数据插入性能优化:
1,通过使用如下选项,可能大幅度提高性能:
更改表属性:
drop index
disable trigger
disable constraint
alter table t nologging(关于日志,参考附录)

处理过程:
append
parallel
batch commit

2.对于同一数据库,并行查询、插入:
alter session enable parallel dml;
insert /*+parallel(t1 8) */ into tab1 t1
select /*+parallel(t2 8) */ * from tab2 t2;
commit;
alter session disable parallel dml;

3.对于不同数据库,可选方案如下:
3.1可移动表空间,速度最快
3.2使用外部表,因为导出过程可以并行,无须导入,速度很快(参考海量数据处理_使用外部表进行数据迁移)
3.3数据泵导出、导入,因为导入、导出过程都可以使用并行,速度很快
3.4通过database link复制,查询和插入都可以并行,瓶颈在网络传输
3.5sqlplus copy,支持如下类型:CHAR,DATE,LONG,NUMBER,VARCHAR2
测试:
drop table t;

create table t
as
select cust_id,name_zh,name_en,mksg_id from customer where 1=2;

set copycommit 2;
set arraysize 5000;
copy from bocnet/bocnet@it30_22.188.20.97 -
insert t -
using SELECT cust_id,name_zh,name_en,mksg_id from customer;


附录:
引用一下前人的结论:
(1)数据库在归档模式下
  当表模式为logging状态时,无论是append模式还是no append模式,redo都会生成。
  当表模式为nologging状态时,只有append模式,不会生成redo.

(2)数据库在非归档模式下
 无论是在logging还是nologing的模式下,append的模式都不会生成redo,而noappend模式下都会生成redo。

(3)在Oracle内部还存在一个内部参数:_disable_logging 默认是false
 通过更改为true可以让Oracle在修改表中的记录的时候完全不记录redo,这个参数要慎用。平时,我们只作为性能测试用。

(4)force logging(强制日志)模式:
 alter database force logging来使得Oracle无论什么操作都进行redo的写入。
 通过select force_logging from v$database可以看到当前数据库强制日志模式的状态。


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/18922393/viewspace-696795/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-26

  • 博文量
    211
  • 访问量
    810323