簡體   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