我正在尝试在包含12,500,000条记录的表上的数据库上运行Hibernate Search。
启动时,Hibernate Search会查询数据库以获取架构信息。
问题是我得到OutOfMemory:堆大小异常。
我读了一遍,发现MySQL的JDBC连接器将查询放在JAVA堆内存上,这是一个错误。
这个错误是否存在问题?
我正在使用5.1连接器。
请查看我在Hibernate论坛上的帖子,他们写道,MySQL中存在一个错误 Hibernate Search Forum
问题是如何围绕它进行工作?
答案 0 :(得分:2)
我找到了解决方案。
在MySQL中,我不得不添加连接字符串:
&useServerPrepStmts=true&useCursorFetch=true
此选项默认启用流式传输结果。
答案 1 :(得分:1)
如果内存不足,则不一定是错误,您可能没有足够的内存分配给Java。堆空间是存储对象中数据的位置,JDBC连接是对象。如果代码正确,并且您只需要更多堆空间,请增加堆的大小。
java -Xms<initial heap size> -Xmx<maximum heap size>
如果这不能解决问题,则代码可能存在更深层次的问题;一些不应该吃的记忆。在不断添加更多内存之前找到问题;否则你只是在问题上放一个临时绷带,绷带可能不会持续很长时间。
答案 2 :(得分:0)
数据库元数据不需要太多内存。使用分析器启动应用程序,您将立即看到内存的使用方式。