【发布时间】:2018-06-16 15:44:43
【问题描述】:
有一种说法是“Prefetch 是 8i 的一项新功能,客户端将自动为您获取数组——您不必再进行数组获取,它会发生。”来自https://asktom.oracle.com/pls/apex/asktom.search?tag=prefetch,似乎预取是数组提取的替代品。在 OCCI api(OCI C++ 版本)中,它具有用于数组提取的 SetDataBuffer 和用于预取的 setPrefetchRowCount,请参阅https://docs.oracle.com/database/121/LNCPP/reference027.htm#LNCPP1019。好像可以一起用。但是在我的性能测试中,我没有看到通过在特定数组大小(批量大小)下增加 prefetchCount 来提高性能。那么array fetch和prefetch有什么区别,如何配置prefetchCount来提高性能呢?
【问题讨论】:
-
您总共选择了多少行数据以及您的预取行数是多少(从内存中我认为 Oracle 中的默认值是 100(OCCI 可能不同)?另外,数据库/操作系统/等可能已经在缓存您选择的数据?
-
我正在加载 1GB 的 TPC-H 数据,总共 6990506 行。而且我正在尝试将 BatchSize 设置为 10000,而 PrefetchCount 从 0 到 10000 没有显示任何差异。
-
这两个值都用于调整数据获取,而不是用于将数据加载到 Oracle DB 中。
-
是的。我正在从 Oracle DB 中读取数据。
标签: oracle oracle-call-interface prefetch