Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Оптимизация в Hibernate / 13 сообщений из 13, страница 1 из 1
10.03.2006, 12:15
    #33592273
Pomytkin Evgeny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
У меня возникла проблема со скоростью в web-приложении с применением Hibernate. SQL запрос, который выполняется в Toad за 2 секунды, в приложении выполняется в разы медленнее.

Посоветуйте, где можно покопаться над повышением быстродействия.
...
Рейтинг: 0 / 0
10.03.2006, 12:18
    #33592290
chernolyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
попробуй ручками оптимизировать sql запросы.
а какая БД? Какой объем записей?
...
Рейтинг: 0 / 0
10.03.2006, 12:55
    #33592464
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
Приведите trace к серверу
Приведи настройки SessionFactory
...
Рейтинг: 0 / 0
10.03.2006, 15:45
    #33593175
Pomytkin Evgeny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
База - Oracle.

to chernolyas:
Не понял, зачем ручками оптимизировать запрос, вопрос в другом : почему разница в разы при выполнении в Toad и Hibernate. Не в пользу последнего.

to funikovyuri:
Тормозит на коде
Код: plaintext
query.list();
Запрос возвращает набор scalar'ов и сам запрос SQL, а не HQL.
Нужны ли еще trace при таком уточнении?

Настройки SessionFactory :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<session-factory>
        <property name="connection.username">xxx</property>
        <property name="connection.url">jdbc:oracle:thin:@our_server: 1521 :orc</property>
        <property name="dialect">org.hibernate.dialect.OracleDialect</property>
        <property name="connection.password">yyy</property>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="show_sql">true</property>
        <property name="use_reflection_optimizer">false</property>

        <property name="c3p0.acquire_increment"> 1 </property>
        <property name="c3p0.idle_test_period"> 300 </property>
        <property name="c3p0.min_size"> 1 </property>
        <property name="c3p0.max_size"> 100 </property>
        <property name="c3p0.timeout"> 60 </property>
</session-factory>

P.S. Установка use_reflection_optimizer в true на скорость не влияет
...
Рейтинг: 0 / 0
10.03.2006, 16:36
    #33593378
chernolyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
да. ... тогда странно. ну тут можно посоветовать повнимательнее почитать логи, которые пишет hibernate. возможно там будет виднее что действительно тормозит. Само выполнение запроса или мапинг обектов на основании resultset'а.
...
Рейтинг: 0 / 0
11.03.2006, 00:15
    #33594032
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
chernolyasну тут можно посоветовать повнимательнее почитать логи, которые пишет hibernate

А если ничего подозрительного не найдете, не забудьте отключить логи (а также show_sql). Они сами по себе резко ухудшают производительность - по понятной, надеюсь. причине.
...
Рейтинг: 0 / 0
13.03.2006, 15:28
    #33597060
Pomytkin Evgeny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
В общем Hibernate оказался ни причем.

В Toad в запросе я использовал такую конструкцию:
Код: plaintext
1.
select * from xtable x
from x.begindate between trunc(sysdate) and sysdate;

А в Hibernate конструкция была несколько сложнее:
Код: plaintext
1.
select * from xtable x
from x.begindate between :start and :end;

Так вот выяснилось, что если я подставляю значения как тип Timestamp, то запрос выполняется значительно медленнее, чем если подставлять строки в запрос типа:
Код: plaintext
1.
select * from xtable x
from x.begindate between to_date(:start, :mask) and to_date(:end, :mask);

Пробовал через jdbc выполнить, результат тот же. Значит проблема не в Hibernate...
Сейчас я в задумчивости, почему же так происходит?
...
Рейтинг: 0 / 0
13.03.2006, 15:31
    #33597077
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
а поля в таблице какого типа? И еще думаю стоит план запроса посмотреть!?
...
Рейтинг: 0 / 0
16.03.2006, 10:41
    #33604380
Pomytkin Evgeny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
Тип таблицы обычный.

Планы одинаковые.
...
Рейтинг: 0 / 0
16.03.2006, 22:14
    #33606725
Sleepy_PIP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
Pomytkin EvgenyВ общем Hibernate оказался ни причем.

В Toad в запросе я использовал такую конструкцию:
Код: plaintext
1.
select * from xtable x
from x.begindate between trunc(sysdate) and sysdate;

А в Hibernate конструкция была несколько сложнее:
Код: plaintext
1.
select * from xtable x
from x.begindate between :start and :end;

Так вот выяснилось, что если я подставляю значения как тип Timestamp, то запрос выполняется значительно медленнее, чем если подставлять строки в запрос типа:
Код: plaintext
1.
select * from xtable x
from x.begindate between to_date(:start, :mask) and to_date(:end, :mask);

Пробовал через jdbc выполнить, результат тот же. Значит проблема не в Hibernate...
Сейчас я в задумчивости, почему же так происходит?


какого типа поле
x.begindate
в табличке?
...
Рейтинг: 0 / 0
17.03.2006, 15:57
    #33608519
Pomytkin Evgeny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
to funikovyuri:
посмотрел более внимательно - планы одинаковые, но стоимость разная: где используется to_date, стоимость меньше. Это на Oracle8i. А на тестовом сервере с Oracle 10g еще интересней - планы разные: где используется to_date, стоимость меньше и он короче.

to Sleepy_PIP:
Date
...
Рейтинг: 0 / 0
17.03.2006, 22:16
    #33609355
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
1. Снова проверить планы запросов
2. Проверить трейс к серверу
3. Проверить этот же запрос на вашем jdbc драйвере но без hibernate
...
Рейтинг: 0 / 0
20.03.2006, 11:41
    #33611389
Pomytkin Evgeny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация в Hibernate
to funikovyuri:

Все это я уже делал.
1. Планы различаются ТОЛЬКО стоимостью.
2. Исходя из анализа трейса время тратится в основном на fetch. Пропорции cpu/fetch как в медленном, так и в быстром приблизительно одинаковое 3/7
3. При выполнении через jdbc имеет та же проблема.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Оптимизация в Hibernate / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]