JDBC(mysql)将查询保存在堆内存中

时间:2010-07-12 16:21:43

标签: java mysql jdbc

我正在尝试在包含12,500,000条记录的表上的数据库上运行Hibernate Search。

启动时,Hibernate Search会查询数据库以获取架构信息。

问题是我得到OutOfMemory:堆大小异常。

我读了一遍,发现MySQL的JDBC连接器将查询放在JAVA堆内存上,这是一个错误。

这个错误是否存在问题?

我正在使用5.1连接器。

请查看我在Hibernate论坛上的帖子,他们写道,MySQL中存在一个错误 Hibernate Search Forum

问题是如何围绕它进行工作?

3 个答案:

答案 0 :(得分:2)

我找到了解决方案。

在MySQL中,我不得不添加连接字符串:

&useServerPrepStmts=true&useCursorFetch=true

此选项默认启用流式传输结果。

答案 1 :(得分:1)

如果内存不足,则不一定是错误,您可能没有足够的内存分配给Java。堆空间是存储对象中数据的位置,JDBC连接是对象。如果代码正确,并且您只需要更多堆空间,请增加堆的大小。

java -Xms<initial heap size> -Xmx<maximum heap size>

如果这不能解决问题,则代码可能存在更深层次的问题;一些不应该吃的记忆。在不断添加更多内存之前找到问题;否则你只是在问题上放一个临时绷带,绷带可能不会持续很长时间。

答案 2 :(得分:0)

数据库元数据不需要太多内存。使用分析器启动应用程序,您将立即看到内存的使用方式。