当前位置: 首页 > 面试题库 >

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

柴禄
2023-03-14
问题内容

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

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

-–于2009年7月13日编辑

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

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

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


问题答案:

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



 类似资料:
  • 如何在不创建多个字符串的情况下获得所有列和记录?假设我在那个表中有10列,我不需要把它存储到一个对象中 谢了。

  • 基于@ari答案的解决方案我已经更新了代码。现在它被优化到只使用1MB(我不知道这是否是将进程分成块的最佳方式,但现在它似乎得到了改进,并且不提供OOM)。我将尝试通过检测可以使用多少堆内存来进一步优化它,但我不确定是否可以实现这一点。直到比这似乎是最好的选择。再次感谢@Ari。

  • 问题内容: 我正在构建一个Web应用程序,该应用程序需要同时使用jquery ajax简短形式进行大约28000个数据库调用。 它可以正常处理大约6000个调用,但随后浏览器在浏览器控制台中向我提供了大约20000以下错误(每个调用一个): POST(我的数据库调用)网:: ERR_INSUFFICIENT_RESOURCES 有谁知道如何解决这个问题?也许要创建一个缓冲区或什么? 谢谢! 编辑1

  • 本文向大家介绍python分块读取大数据,避免内存不足的方法,包括了python分块读取大数据,避免内存不足的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python分块读取大数据,避免内存不足的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 21:17:21 update DEPT_DUP set dept_name=null,其中dept_no='D010'错误代码:1175。您使用的是安全更新模式,并且试图更新一个没有使用键列的WHERE的表。要禁用安全模式,请在Preferences->SQL Editor中切换该选项并重新连接。0.000秒 在错误信息中,它给了我路径,但我无法理解在哪里重新连接?

  • 问题内容: 假设我有一张桌子,我用symfony按字母顺序排序。每个项目都有一个相当随机的ID,我想在某个ID之后检索所有项目。例如: 假设我想检索和。我事先知道ID 3,并且想要它之后的所有内容。 我应该如何构造语句来实现这一目标? 我不在乎答案是否使用Propel,MySQL,SQL或其他。只要有可能。 问题答案: (至少与Postgres和Just Aguy的SQL Fiddle一起运行)