[英]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.