有一种说法是“Prefetch是一种新的8i功能,客户端将自动为您提取数组 - 您不必再进行数组提取,它只会发生。”来自https://asktom.oracle.com/pls/apex/asktom.search?tag=prefetch,似乎prefetch是数组提取的替代品。在OCCI api(OCI C ++版本)中,它具有用于数组提取的SetDataBuffer和用于预取的setPrefetchRowCount,请参阅https://docs.oracle.com/database/121/LNCPP/reference027.htm#LNCPP1019。似乎它们可以一起使用。但在我的性能测试中,我没有看到通过在特定数组大小(批量大小)下增加prefetchCount来提高性能。那么数组提取和预取的区别是什么,以及如何配置prefetchCount来提高性能呢?
答案 0 :(得分:0)
什么数据类型?当查询包含LONG或LOB列时,预取在内部被禁用Oracle。
如果你使用预取&数组一起取出,一般建议在执行时启用预取(因此,应用程序和执行操作的DB之间的往返也会带回数据,从而减少整体往返),然后交换到数组提取。
对于通用ODPI-C库,我们使用常量prefetch of 2并使用数组提取。对于您自己的应用程序,您可能会发现不同的值更好。有一些因素,如内存分配和发挥作用的重新分配成本等。