100万数据载入 sqlldr 能不能再快一点?

setp-1 生成数据文件:

getobject.sql

SELECT a.owner||',"'||a.object_name||'",'||a.object_id||','||to_char(a.created,'yyyy-mm-dd hh24:mi:ss')||','||a.status FROM dba_objects a, (SELECT rownum rn FROM dual connect BY rownum<=23) b; call.sql

SET echo off SET term off SET line 100 pages 0 SET feedback off SET heading off spool C:\oracle\script\ldr_object.csv @C:\oracle\script\getobject.sql spool off SET heading on SET feedback on SET term on SET echo on

step 0初始化环境:

createobject.sql

CREATE TABLE objects ( owner varchar(30), object_name varchar(50), object_id NUMBER, created date, status VARCHAR2(10) ); CREATE INDEX idx_obj_owner_name on objects(owner,object_name);

step1:第一次执行导入

ldr_object.ctl

load data infile ldr_object.csv truncate into table objects fields terminated by "," optionally enclosed by '"' ( owner, object_name, object_id, created date 'yyyy-mm-dd hh24:mi:ss', status "substr(:status,1,5)" )
C:\oracle\script>sqlldr scott/tiger control=ldr_object.ctl errors=10

ldr_object.log

SQL*Loader: Release 10.2.0.1.0 - Production on 星期五 1月 20 02:16:56 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. 控制文件: ldr_object.ctl 数据文件: ldr_object.csv 错误文件: ldr_object.bad 废弃文件: 未作指定 (可废弃所有记录) 要加载的数: ALL 要跳过的数: 0 允许的错误: 10 绑定数组: 64 行, 最大 256000 字节 继续: 未作指定 所用路径: 常规 表 OBJECTS,已加载从每个逻辑记录 插入选项对此表 TRUNCATE 生效 列名 位置 长度 中止 包装数据类型 ------------------------------ ---------- ----- ---- ---- --------------------- OWNER FIRST * , O (") CHARACTER OBJECT_NAME NEXT * , O (") CHARACTER OBJECT_ID NEXT * , O (") CHARACTER CREATED NEXT * , O (") DATE yyyy-mm-dd hh24:mi:ss STATUS NEXT * , O (") CHARACTER 列的 SQL 串: "substr(:status,1,5)" 表 OBJECTS: 1033298 行 加载成功。 由于数据错误, 0 行 没有加载。 由于所有 WHEN 子句失败, 0 行 没有加载。 由于所有字段都为空的, 0 行 没有加载。 为绑定数组分配的空间: 82560 字节 (64 行) 读取 缓冲区字节数: 1048576 跳过的逻辑记录总数: 0 读取的逻辑记录总数: 1033298 拒绝的逻辑记录总数: 0 废弃的逻辑记录总数: 0 从 星期五 1月 20 02:16:56 2012 开始运行 在 星期五 1月 20 02:19:02 2012 处运行结束 经过时间为: 00: 02: 05.55 CPU 时间为: 00: 00: 10.38

step2: 第二次执行导入

C:\oracle\script>sqlldr scott/tiger control=ldr_object.ctl errors=10 rows=640

.log

SQL*Loader: Release 10.2.0.1.0 - Production on 星期五 1月 20 02:56:28 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. 控制文件: ldr_object.ctl 数据文件: ldr_object.csv 错误文件: ldr_object.bad 废弃文件: 未作指定 (可废弃所有记录) 要加载的数: ALL 要跳过的数: 0 允许的错误: 10 绑定数组: 640 行, 最大 256000 字节 继续: 未作指定 所用路径: 常规 表 OBJECTS,已加载从每个逻辑记录 插入选项对此表 TRUNCATE 生效 列名 位置 长度 中止 包装数据类型 ------------------------------ ---------- ----- ---- ---- --------------------- OWNER FIRST * , O (") CHARACTER OBJECT_NAME NEXT * , O (") CHARACTER OBJECT_ID NEXT * , O (") CHARACTER CREATED NEXT * , O (") DATE yyyy-mm-dd hh24:mi:ss STATUS NEXT * , O (") CHARACTER 列的 SQL 串: "substr(:status,1,5)" ROWS 参数所用的值已从 640 更改为 198 表 OBJECTS: 1033298 行 加载成功。 由于数据错误, 0 行 没有加载。 由于所有 WHEN 子句失败, 0 行 没有加载。 由于所有字段都为空的, 0 行 没有加载。 为绑定数组分配的空间: 255420 字节 (198 行) 读取 缓冲区字节数: 1048576 跳过的逻辑记录总数: 0 读取的逻辑记录总数: 1033298 拒绝的逻辑记录总数: 0 废弃的逻辑记录总数: 0 从 星期五 1月 20 02:56:28 2012 开始运行 在 星期五 1月 20 02:57:48 2012 处运行结束 经过时间为: 00: 01: 20.91 CPU 时间为: 00: 00: 09.45

嗯,加快了45s

setp3 第三次执行导入

使用direct参数

C:\oracle\script>sqlldr scott/tiger control=ldr_object.ctl errors=10 direct=true

log

SQL*Loader: Release 10.2.0.1.0 - Production on 星期五 1月 20 03:44:39 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. 控制文件: ldr_object.ctl 数据文件: ldr_object.csv 错误文件: ldr_object.bad 废弃文件: 未作指定 (可废弃所有记录) 要加载的数: ALL 要跳过的数: 0 允许的错误: 10 继续: 未作指定 所用路径: 直接 表 OBJECTS,已加载从每个逻辑记录 插入选项对此表 TRUNCATE 生效 列名 位置 长度 中止 包装数据类型 ------------------------------ ---------- ----- ---- ---- --------------------- OWNER FIRST * , O (") CHARACTER OBJECT_NAME NEXT * , O (") CHARACTER OBJECT_ID NEXT * , O (") CHARACTER CREATED NEXT * , O (") DATE yyyy-mm-dd hh24:mi:ss STATUS NEXT * , O (") CHARACTER 列的 SQL 串: "substr(:status,1,5)" 表 OBJECTS 的以下索引已处理: 索引 SCOTT.IDX_OBJ_OWNER_NAME 已成功加载, 具有 1033298 个关键字 表 OBJECTS: 1033298 行 加载成功。 由于数据错误, 0 行 没有加载。 由于所有 WHEN 子句失败, 0 行 没有加载。 由于所有字段都为空的, 0 行 没有加载。 日期高速缓存: 最大大小: 1000 条目数: 892 命中数 : 1032406 未命中数 : 0 在直接路径中没有使用绑定数组大小。 列数组 行数: 5000 流缓冲区字节数: 256000 读取 缓冲区字节数: 1048576 跳过的逻辑记录总数: 0 读取的逻辑记录总数: 1033298 拒绝的逻辑记录总数: 0 废弃的逻辑记录总数: 0 由 SQL*Loader 主线程加载的流缓冲区总数: 302 由 SQL*Loader 加载线程加载的流缓冲区总数: 201 从 星期五 1月 20 03:44:39 2012 开始运行 在 星期五 1月 20 03:45:11 2012 处运行结束 经过时间为: 00: 00: 32.17 CPU 时间为: 00: 00: 06.19
嗯,现在只要半分钟零一点就好了

setp 4 执行第四次导入

加大流存储区,加大日期格式缓冲区

C:\oracle\script>sqlldr scott/tiger control=ldr_object.ctl errors=10 direct=true streamsize=10485760 date_cache=5000

log

SQL*Loader: Release 10.2.0.1.0 - Production on 星期五 1月 20 03:48:27 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. 控制文件: ldr_object.ctl 数据文件: ldr_object.csv 错误文件: ldr_object.bad 废弃文件: 未作指定 (可废弃所有记录) 要加载的数: ALL 要跳过的数: 0 允许的错误: 10 继续: 未作指定 所用路径: 直接 表 OBJECTS,已加载从每个逻辑记录 插入选项对此表 TRUNCATE 生效 列名 位置 长度 中止 包装数据类型 ------------------------------ ---------- ----- ---- ---- --------------------- OWNER FIRST * , O (") CHARACTER OBJECT_NAME NEXT * , O (") CHARACTER OBJECT_ID NEXT * , O (") CHARACTER CREATED NEXT * , O (") DATE yyyy-mm-dd hh24:mi:ss STATUS NEXT * , O (") CHARACTER 列的 SQL 串: "substr(:status,1,5)" 表 OBJECTS 的以下索引已处理: 索引 SCOTT.IDX_OBJ_OWNER_NAME 已成功加载, 具有 1033298 个关键字 表 OBJECTS: 1033298 行 加载成功。 由于数据错误, 0 行 没有加载。 由于所有 WHEN 子句失败, 0 行 没有加载。 由于所有字段都为空的, 0 行 没有加载。 日期高速缓存: 最大大小: 5000 条目数: 892 命中数 : 1032406 未命中数 : 0 在直接路径中没有使用绑定数组大小。 列数组 行数: 5000 流缓冲区字节数:10485760 读取 缓冲区字节数: 1048576 跳过的逻辑记录总数: 0 读取的逻辑记录总数: 1033298 拒绝的逻辑记录总数: 0 废弃的逻辑记录总数: 0 由 SQL*Loader 主线程加载的流缓冲区总数: 302 由 SQL*Loader 加载线程加载的流缓冲区总数: 0 从 星期五 1月 20 03:48:27 2012 开始运行 在 星期五 1月 20 03:48:53 2012 处运行结束 经过时间为: 00: 00: 25.39 CPU 时间为: 00: 00: 06.38

顺利突破30s


我相信,随着我继续学习,对各个参数的熟悉,还能再快点~


参考《涂抹oracle 》相关内容

你可能感兴趣的:(100万数据载入 sqlldr 能不能再快一点?)