检索包含 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 行后程序仍然挂起的主要内容,如果未能解决你的问题,请参考以下文章

database/sql rows.scan 在 350K 行后挂起

递归——CPS

eclipse 断点调试

1124: 零起点学算法31——开始新的起程

IIS 垃圾收集与许多应用程序域一起挂起

43.开始新的起程( 循环)