检索包含 CLUB 的 100 行后程序仍然挂起
Posted
技术标签:
【中文标题】检索包含 CLUB 的 100 行后程序仍然挂起【英文标题】:Program still hangs after retrieving 100 rows containg CLOBs 【发布时间】:2012-04-24 12:43:01 【问题描述】:这与版本 1.3.165 在检索其行包含一个或多个 CLOB 的远程(TCP/IP 连接)结果集时遇到的问题相同。版本 1.3.166 中的修复是将用于保存远程 CLOB 的缓存大小设置为 SysProperties.SERVER_RESULT_SET_FETCH_SIZE * 2。这带来了一个新问题:
我的特定表恰好每行有 5 个 CLOBs,所以除非我知道总是在客户端调用 setFetchSize基于给定结果集的每行 CLOB 数量的适当的小数字。
在版本 1.3.165 中,当缓存大小设置为 SysProperties.SERVER_CACHED_OBJECTS 时,我可以将 SERVER_RESULT_SET_FETCH_SIZE 的默认值乘以代表 最大数量的某个因子我希望在我的任何结果集中每行都有 CLOB,然后在服务器端相应地设置 SERVER_CACHED_OBJECTS 并忘记它。这也将允许我对所有查询使用默认提取大小,这可能会更有效。所以我已经退回到 1.3.165。
【问题讨论】:
【参考方案1】:恐怕这是一个不太容易解决的限制。我会将默认大小更改为SysProperties.SERVER_RESULT_SET_FETCH_SIZE * 5
,但这当然只是一种解决方法。真正的解决方案更复杂。一个问题是 LOB 需要在事务提交之前保持打开状态,而 TCP 服务器和客户端组件并不总是知道这种情况。
【讨论】:
SysProperties.SERVER_RESULT_SET_FETCH_SIZE * 5 有点随意。把它放回 SysProperties.SERVER_CACHED_OBJECTS 不是更好吗? @RonAaaronson 然后我将使用Math.max(SysProperties.SERVER_CACHED_OBJECTS, SysProperties.SERVER_RESULT_SET_FETCH_SIZE * 5)
,因此您可以覆盖该值。但这是一个悬而未决的问题,无论如何都需要解决。以上是关于检索包含 CLUB 的 100 行后程序仍然挂起的主要内容,如果未能解决你的问题,请参考以下文章