Oracle问题:改进传统路径加载的问题,direct = false,提交次数和bindsize / readsize

时间:2011-03-23 14:54:44

标签: database oracle oracle11g bulk sql-loader

我目前正在做一个学术基准测试,TPC-H,我有一些大表,我想用直接路径(工作得很好,速度很快)和常规路径加载。

为此,我使用了这个批处理脚本:

for /F "tokens=1,2" %%A in (table4_records.txt) do (
sqlldr userid='tpch/tpch' control=%%A.ctl rows=%%B bindsize=? readsize=? SILENT=HEADER log=bulkload_logs\sf4\bulk_%%A%1.log
)

问题是,无论我给bindsize和/或readsize选项赋值是什么,它总是从65534到65534行提交。我已经传递了%% B大小,这是每个表的确切行数。

在直接加载中,我刚刚在加载孔表后使用了行和提交。

我想做类似的事情,但是使用传统的加载路径 - 我知道这不会更快,但这就是重点。

您能否告诉我如何提供正确的参数,以便我可以: 1-尽可能多地加载尽可能多的数据;
2-较少提交,最好是在表的负载结束时。

以下是表的名称和行数:

lineitem 23996604 - >是最大的,有aprox。磁盘上3GB 订单6000000
partsupp 3200000
部分800000
客户600000
供应商40000
国家25
地区5

3 个答案:

答案 0 :(得分:0)

你不会得到一个3GB的文件来使用传统的路径加载并在最后提交。 来自Oracle文档:

“当SQL * Loader向Oracle数据库发送INSERT命令时,将一次插入整个数组。插入绑定数组中的行后,将发出COMMIT语句。”

“在传统的路径方法中,绑定数组受读取缓冲区大小的限制。因此,更大的读取缓冲区的优点是可以在需要提交操作之前读取更多数据。”

最大化READSIZE和BINDSIZE,直到它告诉您已达到平台的最大值。

答案 1 :(得分:0)

哎呀:

事实证明,在常规路径中ROWS的最大数字是65534,所以我可以继续增加我的bindarray大小! LOL

抱歉,我刚刚在Oracle的文档中找到了它

答案 2 :(得分:-1)

Burleson的网站有a possible way to do this