OCI 中的阵列提取和预提取之间的区别



有一种说法是"预取是一个新的 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。似乎它们可以一起使用。但是在我的性能测试中,我没有看到通过在特定数组大小(批大小(下增加预取计数来改善性能。那么阵列提取和预提取有什么区别,以及如何配置预提取计数以提高性能呢?

什么数据类型?当查询包含 LONG 或 LOB 列时,Oracle 数据库在内部禁用预取。

如果您同时使用预取和数组提取,

一般建议是在执行时启用预取(因此执行操作的应用程序和数据库之间的往返也会带回数据,从而减少整体往返(,然后交换到数组提取。

对于通用的 ODPI-C 库,我们默认预取为 2,数组提取大小为 100。 对于您自己的应用程序,您可能会发现不同的值效果更好。 内存分配和重新分配成本等因素起作用。

最新更新