我想从一张桌子上读取所有数据。该表有400万行,每行有25列。我将获取大小设置为1_000,以避免使用大量数据的JVM过载。但是查询本身由于超时异常而失败。
JDBI是否提供了一个“游标”,它可以批量读取数据,从而避免语句超时?JDBI是否有其他方法可以在没有语句超时的情况下读取这个JDBI?
代码:
var handle = jdbi.open()
handle
.createQuery("SELECT * FROM TEST_TABLE")
.setFetchSize(1_000)
.mapToMap()例外:
query execution canceled due to statement timeout [statement:"SELECT * FROM TEST_TABLE", arguments:{positional:{}, named:{}, finder:[]}]
at org.jdbi.v3.core.statement.SqlStatement.internalExecute(SqlStatement.java:1796)
at org.jdbi.v3.core.result.ResultProducers.lambda$getResultSet$2(ResultProducers.java:64)
at org.jdbi.v3.core.result.ResultIterable.lambda$of$0(ResultIterable.java:57)
at org.jdbi.v3.core.result.ResultIterable.iterator(ResultIterable.java:43)发布于 2022-10-20 22:06:35
首先,尝试使用更小的获取大小。
如果这不起作用,您可以尝试在应用程序代码中进行分页。查看这里的文档:https://www.cockroachlabs.com/docs/stable/pagination.html
最后,您的statement_timeout设置为什么?你能举起它吗?
你在小一点的桌子上测试过吗?在不超时的情况下,您可以加载的最大表是什么?
https://stackoverflow.com/questions/74062707
复制相似问题