Проблемы с производительностью при вызове хранимой процедуры MySQL с использованием Hibernate - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь понять, почему время выполнения моей хранимой процедуры намного выше, когда я запускаю ее из Java с помощью Hibernate, чем когда я запускаю ее непосредственно в MySQL.

Ответственность за хранимую процедуру несет самадля перемещения 20000 строк из таблицы A в таблицу B, а затем удалить их в таблице A.

Выполнение хранимой процедуры в MySQL занимает около 18 секунд.

В Java я использую Hibernate исоздать запрос:

Query query =
    mainSession
        .createSQLQuery("{CALL my_stored_procedure(:maxResultSize)}")
        .setParameter("maxResultSize", maxResultSize);

Затем запрос выполняется, а сеанс сбрасывается и очищается:

List<BigInteger> rows = query.list();
mainSession.flush();
mainSession.clear();

Это занимает около 248 секунд.

Кто-нибудь знаетпочему для вызова хранимой процедуры из Java с помощью Hibernate требуется гораздо больше времени?

Какой подход следует использовать для повышения производительности?

1 Ответ

0 голосов
/ 23 мая 2018

Пожалуйста, не могли бы вы попробовать с нативным запросом, он быстрее для меня и хорошо работает.

List<Object[]> query = (List<Object[]>) mySessionFactory.getCurrentSession()
                .createNativeQuery("{CALL my_stored_procedure(:maxResultSize)}")
        .setParameter("maxResultSize", maxResultSize).getResultList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...