Hibernate, JPQL a duży system, wydajność

0

Mam kilka pytań, pracuję teraz przy sporym, dość starym systemie (zawsze dotychczas miałem małe projekty) i teraz bardziej niż zwykle zwracamy uwagę na "performance" :P

  1. Używamy w zapytaniach JPQL'a, ale często gdy mamy po kilka - kilkanaści złączeń, czy 'select w selekcie' jpql'a po prostu chyba nie da się już użyć i używamy natywnego sql'a, jak uważacie pod kątem ładnosci, czy to problem ? Jedyny jaki widzę, to problem gdybyśmy dodawali nową bazę, ale na to się nie zanosi).

  2. Performance, często mamy kilka, kilkanaście joinów, selecty w selekcie i czas zapytania to kilka - kilkanaście sekund. Jak to można zooptymalizować, co można dodać do jpql'a, czy tym bardziej natywnego sqla ponad indeksy (zapytań raczej nie da sie zminic, poniewaz wszystkie dane, ktore one zwracaja sa potrzebne)

0

Przepisanie jpql na natywne zapytania wcale nie musi dać zysku wydajnościowego.
Jpql jest pod spodem zamieniany na sql i jeżeli Twoje zapytanie w jpql będzie podobne do tego w natywnym sql to różnica będzie minimalna.

Proponuję włączyć w hibernate opcję show_sql i dla scenariuszy, które działają wolne sprawdzić, czy:

  1. Nie ma niepotrzebnych zapytań
  2. Sprawdzić, jaki jest plan tych zapytań i ewentualnie na tej podstawie np. dodać indeksy.
0

ten problem występuje też dla natywnych query.

Ok, czyli tak jak myślałem, że dla natywnych query jedyna optymalizaja to juztylko indeksy, wystraczą na kluczu głównym każdej joinowanej kolumny ?

A może jakiśdodatkowy cache w hibernacie (ponad domyslny pierwszego poziomu) nalezaloby dodac ?

0

Indeksów nie należy zakładać "na pałę", gdyż ich nadmiar jest szkodliwy (inserty i updaty działają wolniej).

Najlepiej wygenerować zapytania i sprawdzić w jakimś kliencie do bazy plan tych zapytań. Indeksy powinno się zakładać dopiero po przeanalizowaniu planów zapytań.

0

ok, a jak z planu wyczytac, ze dana tabela powinna miec indeks na danej kolumnie, co nam to powie ?

1

Straszne, jakim cudem ktoś Ci zlecił zadanie o którym nie masz pojęcia..........

0
mATI__098 napisał(a):

ok, a jak z planu wyczytac, ze dana tabela powinna miec indeks na danej kolumnie, co nam to powie ?

Na przykład jeśli z jakiejś tabeli wybierasz mały pozdbiór rekordów a w planie masz "full table scan" to jest wyraźna sugestia że indeks może się przydać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1