Основная проблема: мы работаем над внутренним приложением, созданным из Java 8. Поскольку мы добавляем все больше и больше классов и методов DAO в нашу внутреннюю часть, некоторые запросы становятся медленнее. Мы уже исключили возможность того, что это может быть связано с самими запросами или базой данных. Запросы не имеют проблем при запуске непосредственно на таком инструменте, как SQL Developer. Они выполняются быстро. Проблема в том, что когда мы запускаем их в бэкэнде нашего приложения, они работают очень медленно. Параллельность запросов также не является причиной, поскольку мы не выполняем запросы асинхронно.
Итак, теперь мы думаем, что это может быть связано с нашими кодами или конфигурацией. Мы используем JPA для наших запросов, и он реализован через Spring и Hibernate. Это мы, как мы определили наш EntityManager.
@Repository
public class MyDao {
@PersistenceContext(unitName = "myPersistenceUnit")
protected EntityManager entityManager;
public EntityManager getEntityManager() {
return entityManager;
}
//dao methods. We use the same EntityManager for every DAO method
}
Что-то не так с нашей конфигурацией? Может ли проблема медленного времени выполнения быть связана с тем, как мы создаем наш EntityManager? Должны ли мы каждый раз создавать новый EntityManager? Одна полезная информация, которую мы обнаружили, заключается в том, что когда мы смотрели статистику базы данных, выполнение наших запросов показало очень высокий уровень использования ввода-вывода. Выполнение их на SQL разработчику не дает такую же статистику ввода / вывода.
Может кто-нибудь помочь нам в этом? наша база данных кстати Oracle 12 c