JPA: возможная причина большого времени выполнения запроса - PullRequest
3 голосов
/ 15 апреля 2019

У меня есть приложение с весенней загрузкой, которое использует запрос JPA.Тот же самый запрос, когда он выполняется непосредственно в live oracle DB, дает результаты примерно через 20-40 мс.С другой стороны, когда я пытаюсь ударить с помощью приложения, требуется переменное время в диапазоне от 1-2 секунд до 50-60 секунд.

Я хочу понять причину такого поведения относительно того, почему оно ведет себя непредсказуемо.Мы подозревали, что это может быть ограниченное количество потоков в пуле, но позже после изоляции приложения от внешнего использования теперь только один пользователь показал такое же поведение.

Запрос должен быстро и последовательно выполняться.Я хотел знать возможные причины такого поведения.

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Это может быть что угодно, например, ненадежная сеть, ресурсы базы данных, неверная конфигурация драйвера JDBC или пауза JCM GC. Попытайтесь установить, где проблема: это клиент Java или сервер базы данных, который принимает время, когда проблема возникает.

Если вы подозреваете, что проблема связана с базой данных, лучше всего проследить соединение и запрос SQL на стороне сервера базы данных. Это даст вам больше информации, например, план выполнения запроса. Каждая база данных имеет свои собственные инструменты, например Документы Oracle содержат всю главу об отслеживании выполнения приложений .

0 голосов
/ 15 апреля 2019

Если вы хотите, чтобы у запроса было такое же время выполнения, как и в оракуле DB, вам следует попробовать написать собственный запрос вместо JPA.

Запрос JPA и собственные запросы к базе данных совершенно различны, поскольку оба выполняются по-разному. JPA выполняется с использованием Java и, следовательно, требует выполнения кода и запроса.

0 голосов
/ 15 апреля 2019

Одной из возможных причин могут быть ваши отношения сущностей попробуйте включить статистику гибернации для более подробной информации:

Вы можете включить следующее:

<persistence>
<persistence-unit name="my-persistence-unit">
    ...

    <properties>
        <property name="hibernate.generate_statistics" value="true" />

        ...
    </properties>
</persistence-unit>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...