簡體   English   中英

Grails和Hibernate-許多具有許多屬性的域對象

[英]Grails and Hibernate - Lots of domain objects with lots of properties

我有另一個問題要解決,但這是一個更大的問題:

使用STS的默認Grails項目的底層是Spring / Hibernate。 當Grails應用程序加載時,我的100,000個以上域對象的數據庫似乎已加載到內存中。 無論這是否在Hiberate / ORM層,我都不知道。

Pre DB domain object load (400 MB start up)
Post DB domain object load (900 MB start up)

這沒有任何引導數據。 開箱即用,無應用程序性能。 只是一個干凈的啟動和我的域對象。

我可以使用監視器,但得到的答案相同。 這似乎是配置。 如何在Grails中設置Hibernate,以不將這些對象加載到內存中?

這是datasource.groovy文件:

dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "xxx"
password = "xxx"
}
hibernate {
cache.use_second_level_cache = false
cache.use_query_cache = true
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
test {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
production {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
}

這真讓我喪命,因為我嘗試了所有類型的調整來啟動文件(引導帶,數據源/休眠,配置等-我什至不記得我嘗試過的每件事)。

*編輯*我沒有對對象進行熱切取回。 只是默認懶惰。

您如何獲得前后記憶編號? 在我看來,除非您在BootStrap.groovy文件中有一個非常奇怪的插件或其他東西,否則整個域對象都不會加載到內存中。

看看這是否真的發生的最簡單方法是為休眠狀態打開跟蹤級別的日志記錄:

trace 'org.hibernate.SQL'

如果確實從數據庫中將所有內容加載到內存中,則在應用啟動時,您會看到大量SQL查詢正在進行。

要進行更多研究,我可能會考慮打開hibernate的JMX監視 ,然后將jconsole連接到正在運行的grails實例,以深入了解已加載內容和未加載內容的詳細信息。

暫無
暫無

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

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