我有一个查询,它生成一个相当大的XML文档(~30k)作为一个大表的每个记录的查询列,形式...
SELECT recordKey, lastUpdatedDate, ( SELECT ... FOR XML PATH( 'elemName' ), TYPE )
FROM largeTable
ORDER BY lastUpdateDate
Run Code Online (Sandbox Code Playgroud)
如果我从SQLServer管理工作室运行此查询,查询几乎立即返回,显示第一行,如我所料,并继续在后台运行.
但是,当我在StreamList模式下从Camel JDBC组件运行此查询时,它似乎在查询时缓存整个结果集,这意味着我的内存不足.
我检查了JDBC驱动程序属性,并明确将responseBuffering属性设置为adaptive,并且还尝试设置selectMethodto cursor,这两者似乎都没有对我的查询产生任何影响.
这是使用JDBC查询XML的特征,还是我需要设置一些不同的参数?
但是,当我在 StreamList 模式下从 Camel JDBC 组件运行此查询时,它似乎在查询时缓存了整个结果集,这意味着我耗尽了内存。
Camel-sql在 v2.18.x 中引入了 'StreamList'输出类型。由于您使用的是 v2.17.6,因此您的配置可能会回退到“SelectList”(默认值)。这会导致将整个结果集作为列表加载到内存中。在查询/结果集中包含 xml 类型对此行为没有任何影响。
您可以在以下位置找到此代码:org.apache.camel.component.sql.SqlConsumer.poll()
我建议您将camel-sql版本升级到v18.x(或最新版本)
希望这可以帮助。