Грааль не использует кеш - PullRequest
3 голосов
/ 20 января 2012

Я заметил замедление на моем сайте и после включения 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>

1 Ответ

0 голосов
/ 20 января 2012

Похоже, у нас тоже была проблема, которая была в основном проблемой выбора N + 1.Вот что мы сделали:

import org.hibernate.FetchMode as FM

...

def crit= item.createCriteria();
def itemList = crit.listDistinct
    {

      fetchMode "subItem", FM.JOIN
      cache true
      order("name","asc")
    }

Вы должны иметь возможность переключить подэлемент на то, что вы когда-либо связывали, и это должно помочь.

...