Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate Criteria: большое время выполнения. Как оптимизировать? 
:(
    Опции темы
unhurt
Дата 26.11.2011, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Доброго времени суток!

Столкнулся с проблемой: используя Hibernate, делаем запрос в БД (PostgreSQL) с помощью Criteria. Время выполнения запроса просто критически огромное: около 1 минуты. Как с этим бороться я пока не знаю, прошу вашей помощи. Хочу так же заметить, что в проекте нету кэширования. 

Вот маппинг класса:

Код

    <class name="com.gs.api.dto.LocationDTO" table="LOCATION">
        <id name="id" column="location_id" type="integer" length="20">
            <generator class="sequence">
                <param name="sequence">LOCATION_SEQ</param>
            </generator>
        </id>

        <property name="status" column="STATUS" type="integer" not-null="true"/>

        <property name="onlineStatus" column="ONLINE_STATUS" type="boolean" not-null="true"/>

        <property name="hostingType" column="HOSTING_TYPE" type="integer" not-null="true"/>

        <property name="title" column="TITLE" type="string" not-null="true"/>

        <property name="description" column="DESCRIPTION" type="string" not-null="true"/>

        <property name="restrictions" column="RESTRICTIONS" type="string" not-null="true"/>

        <property name="architect" column="ARCHITECT" type="string" not-null="true"/>

        <property name="copyrights" column="COPYRIGHTS" type="string" not-null="true"/>

        <property name="creationDate" column="CREATION_DATE" type="date" not-null="true"/>

        <property name="blockTillDate" column="BLOCK_TILL_DATE" type="date"/>

        <property name="dateStatusChange" column="DATE_STATUS_CHANGE" type="date" not-null="true"/>

        <property name="timeZone" column="TIMEZONE" type="integer"/>

        <property name="code" column="LOCATION_CODE" index="LOCATION$2" type="string" unique="true"/>

        <property name="ownerAttention" type="boolean"    formula="(select count(lr.location_request_id)>0 from location_request lr where lr.location_id = location_id and lr.status in (5, 6, 7, 9))"/>

    <property name="deletable" type="boolean" formula="(select count(lr.location_request_id) = 0 from location_request lr where lr.location_id = location_id and lr.status > 2)"/>

        <many-to-one name="owner" column="ACCOUNT_ID" index="LOCATION$1" class="com.gs.api.dto.AccountDTO"
                     not-null="true" lazy="false" cascade="none" update="false" fetch="join"/>

        <many-to-one name="representative" column="REPRESENTATIVE_ID" class="com.gs.api.dto.RepresentativeDTO"
                     lazy="false" cascade="save-update" update="true" fetch="join"/>

        <many-to-one name="address" column="ADDRESS_ID" class="com.gs.api.dto.AddressDTO"
                     lazy="false" cascade="save-update" update="false" fetch="join"/>

        <many-to-one name="gps" column="GPS_ID" class="com.gs.api.dto.GPSDTO"
                     lazy="false" cascade="save-update" update="false" fetch="join"/>

        <bag name="keywords" table="LOCATION_TO_KEYWORD" cascade="save-update" lazy="true" batch-size="30">
            <key column="LOCATION_ID"/>
            <many-to-many class="com.gs.api.dto.KeywordDTO" column="KEYWORD_ID"/>
        </bag>

        <bag name="services" table="LOCATION_TO_SERVICE" cascade="save-update" lazy="true" batch-size="30">
            <key column="LOCATION_ID"/>
            <many-to-many class="com.gs.api.dto.ServiceDTO" column="SERVICE_ID" lazy="false"/>
        </bag>

        <bag name="locationTypes" table="LOCATION_TYPE_TO_LOCATION" cascade="save-update" lazy="false" batch-size="30">
            <key column="LOCATION_ID"/>
            <many-to-many class="com.gs.api.dto.LocationTypeDTO" column="LOCATION_TYPE_ID" lazy="false"/>
        </bag>

        <bag name="locationFinIncentives" table="LOCATION_TO_FIN_INCENTIVE" cascade="save-update" lazy="false" batch-size="30">
            <key column="LOCATION_ID"/>
            <many-to-many class="com.gs.api.dto.LocationFinIncentiveDTO" column="LOCATION_FIN_INCENTIVE_ID"
                          lazy="false"/>
        </bag>

        <bag name="projects" table="PROJECT_TO_LOCATION" cascade="none" inverse="true" lazy="true" batch-size="30">
            <key column="LOCATION_ID"/>
            <many-to-many class="com.gs.api.dto.ProjectDTO" column="PROJECT_ID" lazy="false"/>
        </bag>

        <bag name="blackouts" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.BlackoutDTO"/>
        </bag>

    <!--Special case, should not use  all-delete-orphan but only through LocationImageService -->
        <bag name="images" inverse="true" lazy="true" cascade="none" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.LocationImageDTO"/>
        </bag>

        <bag name="videos" inverse="true" lazy="true" cascade="none" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.LocationVideoDTO"/>
        </bag>

        <bag name="links" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.LinkDTO"/>
        </bag>

        <bag name="prices" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.PriceDTO"/>
        </bag>

        <bag name="publications" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.PublicationDTO"/>
        </bag>

        <bag name="requests" inverse="true" lazy="false" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.LocationRequestDTO"/>
        </bag>

        <bag name="sizes" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.SizeDTO"/>
        </bag>

        <bag name="specialOffers" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.SpecialOfferDTO"/>
        </bag>

        <bag name="updates" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.UpdateDTO"/>
        </bag>

        <bag name="travelInformation" inverse="true" lazy="true" cascade="all-delete-orphan" batch-size="30">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.TravelInfoDTO"/>
        </bag>

        <bag name="history" inverse="true" lazy="true" batch-size="30" cascade="all-delete-orphan" order-by="ACTION_DATE">
            <key column="LOCATION_ID"/>
            <one-to-many class="com.gs.api.dto.AdminHistoryDTO"/>
        </bag>
    </class>


Буду благодарен за любые советы.

Спасибо.
PM MAIL   Вверх
Stolzen
Дата 26.11.2011, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



Могу порекомендовать отключить леньвость там, где не нужно, правильно настроить кеширование (т.е. добавить его); в самой базе - настроить индексирование.
И прочесть это http://docs.jboss.org/hibernate/core/3.3/r...erformance.html

Добавлено через 1 минуту и 44 секунды
Да, и покажите сам запрос

Это сообщение отредактировал(а) Stolzen - 26.11.2011, 21:44


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Vasay
Дата 26.11.2011, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



unhurt

Начните с анализа запроса, который делает Hibernate  к БД.

Возможно будет достаточно правильно настроить индексы.



--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
unhurt
Дата 26.11.2011, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Цитата(Stolzen @ 26.11.2011,  21:43)
Могу порекомендовать отключить леньвость там, где не нужно, правильно настроить кеширование (т.е. добавить его); в самой базе - настроить индексирование.
И прочесть это http://docs.jboss.org/hibernate/core/3.3/r...erformance.html

Добавлено @ 21:45
Да, и покажите сам запрос

Запрос генерирует Criteria полностью, так что в нём нет особого смысла, на мой взгляд. (можно, конечно, достать с помощью show_sql)

Добавлено через 1 минуту и 8 секунд
Цитата(Vasay @ 26.11.2011,  22:24)
unhurt

Начните с анализа запроса, который делает Hibernate  к БД.

Возможно будет достаточно правильно настроить индексы.

Спасибо, подумаю в этом направлении.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.