0

我目前正在做一个学术基准测试,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 -> 是最大的,大约有。3GB 磁盘
订单 6000000零件供应
3200000
零件 800000
客户 600000
供应商 40000
国家 25
地区 5

4

3 回答 3

0

Ooops:

It turns out ROWS maximum number, in Conventional Path, is 65534 exactly, so I could keep increasing my bindarray size! LOL

Sorry, I've just found it in Oracle's documentation

于 2011-03-29T04:40:22.627 回答
0

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

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

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

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

于 2011-03-23T23:04:43.377 回答
-1

Burleson 的网站有一种可能的方法来做到这一点

于 2011-03-23T15:02:57.950 回答