Mam aplikację Java typu open source, która używa Hibernate i HSQLDB do utrwalania. We wszystkich moich testach zabawkowych wszystko biegnie szybko i wszystko jest dobrze. Mam klienta, który nieprzerwanie pracuje przez kilka miesięcy, a jego baza danych znacznie się rozrosła, a wydajność stopniowo spadła. W końcu przyszło mi do głowy, że baza danych może być problemem. O ile mogę powiedzieć z instrukcji log, wszystkie obliczenia na serwerze odbywają się szybko, więc jest to zgodne z hipotezą, że DB może być wadliwy.Jak ustawić wydajność aplikacji hsqldb/hibernate
Wiem, jak normalnie profilować program, aby dowiedzieć się, gdzie znajdują się gorące punkty i co zajmuje znaczną ilość czasu. Ale wszystkie programy profilujące, które znam, monitorują czas wykonywania programu i nie udzielają żadnej pomocy w zakresie wywoływania zasobów zewnętrznych. Jakich narzędzi używają ludzie do profilowania programów używających zewnętrznych wywołań db, aby dowiedzieć się, gdzie optymalizować wydajność?
Mała ślepa wyszukiwarka znalazła już kilka gorących punktów - zauważyłem połączenie, w którym wymieniałem wszystkie przedmioty danej klasy, aby dowiedzieć się, czy są jakieś. Zmiana jednej linii do kryterium [.setMaxResults (1)] zmieniła to połączenie z półsekundy na praktycznie natychmiastowe. Widzę też miejsca, w których wielokrotnie pytam o to samo pytanie z db w ramach pojedynczej transakcji. Nie znalazłem jeszcze odpowiedzi na pytanie, ale to, czego naprawdę chcę, to narzędzie, które pomoże mi bardziej systematycznie szukać tego typu rzeczy.
Nie dokonałem żadnego dostrajania wydajności w konfiguracji DB. Założę się, że mój problem byłby raczej źle sformułowany lub zbyt często zadawał niewłaściwe pytanie. Sądzę, że chciałbym znaleźć sposób na zmniejszenie liczby zapytań i ich wydatków w pierwszej kolejności, a następnie (po zmniejszeniu zużycia o 80%) przyspieszenie samego db poprzez zastosowanie buforowania i innych sztuczek na tym zmniejszonym obciążeniu. Ale nie jestem ekspertem w dostrajaniu użycia DB. Czy sugerowałbyś dostrojenie DB przed aplikacją? – PanCrit
Jeśli masz pewność, że problem jest w hibernacji, dostrojenie DB nie pomoże. Przed strojeniem należy użyć narzędzia do profilowania lub czegoś, co pomaga dokładnie zidentyfikować źródło problemów z wydajnością, a następnie go zoptymalizować. Niestety, nie ma łatwego sposobu. Dobra wiadomość jest taka: wszystkie IDE mają teraz przyzwoitą obsługę profilowania. – razenha