jmix 2.7.1
Столкнулись с проблемой, что кэш в jmix работает медленно.
Прикрепляю демо проект. В нем выполняется 100000 запросов в базу.
Итоги наших замеров:
- Без кэша 31,1 сек
- С кэшом, когда искомой сущности нет 38,3 сек
- С кэшом, когда искомая сущность есть 54,8 сек
- С анотацией @Cacheable, когда искомой сущности нет 221 мс
- С анотацией @Cacheable, когда искомая сущность есть 315 мс
Также прикрепляю снепшоты из VisualVM, числа в названиях файлов соответствуют пунктам выше. Нужный поток можно найти по Total Time (CPU).
Как мы разобрались, основная часть времени уходит на парсинг каждого запроса, обработку параметров, и на создание prototype бинов при создании JmixEclipseLinkQuery. Т.е. происходит много работы ещё до того как дело доходит до кэша.
Шаги для воспроизведения
- Зайти в Application > Cached entities, нажать Test cache
- Раскомментировать eclipselink.cache.shared.CachedEntity=true в application.properties и @QueryHints(@QueryHint(name = PersistenceHints.CACHEABLE, value = “true”)) в CachedEntityRepository, нажать Test cache
- Создать сущность с названием “non-existent”, нажать Test cache
- Удалить сущность “non-existent” и раскомментировать @Cacheable(“testCache”) в CachedEntityService, нажать Test cache
- Создать сущность с названием “non-existent”, нажать Test cache
JmixCacheProblem.zip (184,3 КБ)