Я заметил замедление на моем сайте и после включения debug 'org.hibernate.SQL'
я вижу, где проблемы. Я установил класс домена для кэширования, используя ....
class Foo{
...
static mapping ={
cache 'read-only'
}
String name //<-- simple data type, no associations
String description //<-- simple data type, no associations
}
Мой конфиг hibernate выглядит так ...
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
мой запрос выглядит так (в веб-потоке) ...
def wizardFlow = {
...
def flow.foos = Foo.list([sort:"name", order:"asc", cache:true])
// def flow.foos = Foo.findAll([cache:true]) <--- same result, no caching
}
Я бы подумал, что кеш запросов или кеш второго уровня предотвратит попадание в базу данных, но мой журнал загружен ...
select ... from thing thing0_ where thing0_.id=?
select ... from thing thing0_ where thing0_.id=?
select ... from thing thing0_ where thing0_.id=?
select ... from thing thing0_ where thing0_.id=?
Может ли кто-нибудь пролить свет на то, что может происходить? Другие запросы работают как надо!
Я использую Grails 1.3.7
Наконец, вот мой ehcache.xml ...
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" >
<diskStore path="java.io.tmpdir"/>
<cacheManagerEventListenerFactory class="" properties=""/>
<defaultCache
maxElementsInMemory="1000000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="7200"
overflowToDisk="true"
diskPersistent="false"
/>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"
/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"
/>
</ehcache>