首页 >数据库 >mysql教程 >如何在 Spring 中高效地传输大型 MySQL 结果集而不出现 OutOfMemory 错误?

如何在 Spring 中高效地传输大型 MySQL 结果集而不出现 OutOfMemory 错误?

Patricia Arquette
Patricia Arquette原创
2024-12-02 01:17:12731浏览

How to Efficiently Stream Large MySQL Result Sets in Spring Without OutOfMemory Errors?

流式传输大型 MySQL 结果集

问题描述

在 a 中加载大型 MySQL 表时Spring应用程序中,由于驱动程序尝试将整个表加载到内存中而发生OutOfMemory异常。尽管将获取大小设置为 Integer.MIN_VALUE,但关闭 ResultSet 会导致挂起问题。即使对于小表,挂起也会持续存在,并阻止关闭连接,从而导致以下堆栈跟踪:

[Stack trace of the hang inserted here]

解决方案

仅设置提取大小是不够的。 MySQL JDBC 驱动程序需要特定的语句创建方法:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

注意事项和含义

此方法有几个注意事项:

  • 在执行其他查询之前,必须读取结果集中的所有行。
  • 锁是在事务或语句完成或活动结果集关闭之前不会释放。

其他注意事项

如果 OutOfMemory 异常仍然存在,请考虑立即实施处理从数据库检索的数据以避免过多的内存分配。这可能需要大量的代码重组和不同的流程控制方法。

以上是如何在 Spring 中高效地传输大型 MySQL 结果集而不出现 OutOfMemory 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn