大对象预取机制

ODBC在查询LOB列时,返回的是LOB的地址,并不返回真实数据,如果在通过?ACILobRead?等方法对LOB数据读取时,ACI会用LOB地址再次发送请求给数据库端返回数据,这样的操作常规来说没有问题, 但对于一次查询上万行LOB数据的场景(且合格LOB数据都比较小,几百K),每获取一条LOB数据都会与数据库服务端做二次或者多次交互,导致获取效率非常低。因此ACI设计了LOB预取机制,来提高大对象的读取效率。

预取会占用内存,预取大小对内存占用有决定性影响,因此LOB预取功能,需要对LOB数据有充分了解的人进行合理使用。 建议对大部分LOB数据小于1M的数据进行缓存,而LOB普遍大于1M的,不建议使用LOB缓存。LOB预取功能只在性能上有所差异,不对LOB数据产生任何影响。

神通ODBC支持了预取设置,通过设置数据源或者连接字符串中设置LobPreFetchSzie属性, LobPreFetchSzie不能小于0,0代表不预取,大于0代表预取指定长度的数据,LobPreFetchSzie大小以字节为单位。

预取功能适合获取行数较多,但LOB数据量比较小的场景,避免ODBC驱动与数据库端频繁交互降低效率。