繁体   English   中英

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

[英]JDBC (mysql) saves queries in heap memory

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

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

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

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

是否有针对此错误的工作环境?

我正在使用5.1连接器。

请参阅我在Hibernate论坛上的帖子,他们在其中写道MySQL Hibernate Search Forum中存在错误。

问题是我该如何解决?

我找到了解决方案。

在MySQL中,我必须添加到连接字符串:

&useServerPrepStmts=true&useCursorFetch=true

默认情况下,此选项启用流式传输结果。

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

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

如果这不能解决问题,很可能代码有更深层次的问题。 令人吃不消的记忆。 在不断增加内存之前找到问题; 否则,您只是在问题上使用临时绷带,绷带可能不会持续很长时间。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM