admin

从大表中检索所有记录时,如何避免OOM(内存不足)错误?

sql

我得到了一个将巨大的表转换为自定义XML文件的任务。我将使用Java来完成这项工作。

如果我只是发出“ SELECT * FROM
customer”,它可能会返回大量数据,这些数据最终会导致OOM。我想知道,有没有一种方法可以立即处理记录,一旦可用,就可以在sql检索过程中从内存中删除记录?

-–于2009年7月13日编辑

让我详细说明我的问题。我有1个数据库服务器和1个应用程序服务器。当我在应用程序中发出选择查询时,数据将从数据库服务器传播到应用程序服务器。

我相信(如果我错了,请纠正我)ResultSet将需要等待,直到接收到查询中的所有记录。即使将获取大小设置为4,对于1000条记录的表,我们仍然在应用程序服务器的堆内存中仍然有1000条记录,对吗?访存大小仅影响往返数据库服务器的往返次数。

我的问题是,如何在到达应用服务器后立即开始处理这4个(或任何数量)记录,并将其处置以释放应用服务器中的内存?


阅读 147

收藏
2021-05-10

共1个答案

admin

我认为您可以使用与解决方案相同的解决方案。可滚动的结果集。

2021-05-10