如何在查询时使用XML类型阻止SQLServer JDBC查询缓存整个结果集?

Scr*_*ape 5 sql-server jdbc

我有一个查询,它生成一个相当大的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的特征,还是我需要设置一些不同的参数?

ska*_*dya 1

但是,当我在 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(或最新版本)

希望这可以帮助。