我目前正在做一个学术基准测试,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
答案 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。