2014-12-25 2 views
1

Я использую hibernate, spring-data-jpa и querydsl.Различные сроки исполнения по тому же запросу

Когда я впервые подключился к моей индексной странице, я вручную подсчитываю время запроса всех своих операторов repository.findXXX(). Обычно они составляют около 5 секунд, но когда я обновляю страницу, они принимают только 1 секунду для запуска.

Может ли кто-нибудь объяснить эту разницу?

+0

Проверьте инициализацию компонентов во время первого доступа к странице индекса. Одним из них может быть пул соединений. Включить журналы уровня отладки. –

+0

Можете ли вы объяснить больше, какова роль пула соединений? – Youssef

+0

посмотрел в журнал? казалось бы, не –

ответ

3
  1. Скорее всего, база данных кэшировала ваш запрос, поэтому он работает быстрее во второй раз.

  2. Для Hibernate кэшировать запрос вам будет нужно:

    • установки кэша второго уровня с кэширования запросов:

      кэш запросов
      <prop key="hibernate.cache.use_second_level_cache">true</prop> 
      <prop key="hibernate.cache.use_query_cache">true</prop> 
      <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> 
      
    • реактивировать для текущего запроса бега: * ***

      List cats = session.createQuery("from MyEntity") 
          .setCacheable(true) 
          .list(); 
      
+0

база данных ('mysql') или hibernate кэшировала мой запрос? – Youssef

+0

Скорее всего, база данных. Чтобы Hibernate кэшировал ваш запрос, вам необходимо активировать кеш второго уровня, кэш запросов и пометить запрос как кешируемый. –

Смежные вопросы