簡體   English   中英

Hibernate:是否有可能找出實際使用的急切加載的集合?

[英]Hibernate: Is it possible to find out which eagerly loaded collections are actually used?

我懷疑我們的一個應用程序中的一些性能問題是由於hibernate對某些關聯的過度加載導致的,這可能通過切換到延遲加載來解決。 不幸的是,很難跟蹤實際使用關聯的方式和時間 - 更不用說“平均”使用它們的頻率。 是否有一些工具(休眠日志記錄選項?),它們有助於決定哪些急切加載的關聯應該更好地延遲加載和/或切換到其他提取策略

例如,我可以想象一個工具,它表示每個hibernate會話的日志,每個類的對象加載了多少,以及應用程序實際訪問了多少對象,甚至生成了一些統計信息。 當然,最后只有負載測試可以決定什么是更好的,但這可能會給你一些想法嘗試。 或者也許還有更好的工具。

Hibernate不支持任何LAZY初始化統計信息,因為它只提供了一個框架,但最終,應用程序開發人員有責任決定如何使用它來滿足他的項目需求。

EAGER提取是一​​種代碼氣味 大多數情況下,它是為了簡單起見而使用而不考慮長期性能損失。 提取策略永遠不應該是實體映射責任。

每個業務用例都有不同的實體負載需求,因此應該將獲取策略委托給每個單獨的查詢。

您可以獲得的最佳統計信息是簡單地記錄所有SQL語句,並確定是否需要執行的查詢來滿足每個特定的請求要求。

我的建議是支持LAZY關聯,並在需要加載一些LAZY關聯時使用基於查詢的提取指令。

暫無
暫無

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

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