簡體   English   中英

hibernate.jdbc.fetch_size 或 @QueryHints(@javax.persistence.QueryHint(name="org.hibernate.fetchSize", value="10")) 不起作用

[英]hibernate.jdbc.fetch_size or @QueryHints(@javax.persistence.QueryHint(name="org.hibernate.fetchSize", value="10")) not working

我們正在使用帶有 spring JPA(hibernate) 的 Oracle DB,為了提高數據獲取性能,我添加了@QueryHints(@javax.persistence.QueryHint(name="org.hibernate.fetchSize", value=100000)) ,這顯着提高了性能。

現在,當我想將其更改為較小的值(例如 100 或 10)時,它不起作用。 它仍然可以快速完成,這與以前的行為不同(等待幾分鍾完成數據獲取),但有時我會遇到“內存不足”問題。 我試圖在屬性文件中添加 hibernate.jdbc.fetch_size=10 並更改 QueryHint,但這些都不起作用。 如何更改獲取大小?

環境:Linux

我希望我可以將休眠提取大小更改回較小的值,例如 10 或 100。

oracle 中默認獲取大小已經是 10 條記錄,因此在添加此提示時遇到內存不足問題很奇怪。 特別是如果 100000 不構成問題。

我會做一些事情來查明問題並提供解決方案:

准系統測試你的代碼

以最小的開銷測試負責您的查詢(可能是您的 DAO)的代碼。 我懷疑內存不足異常更有可能是由於處理數據庫結果而不是實際查詢 + fetchsize。

因此,暫時更改您的代碼以簡單地執行查詢,但不要對其進行任何映射或其他處理。 只要確保它完成。

如果這似乎“解決”了您的問題,您可能對接收到的數據執行了一些操作,這些數據會淹沒您的記憶。

更新您的依賴項

如果您使用的是 maven(或 gradle,或任何其他構建工具),我建議至少將任何更新更新到最新的次要版本(例如 1.2.3 -> 1.2.9),這不應破壞任何內容,但可能修復一些錯誤。

不要隨意使用獲取大小

查看這些答案以確定適合您的情況的合適的提取大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM