Czy istnieje jakieś narzędzie do wykrywania problemów wydajnościowych n+1 dla jpa ? Poszukuje jakiegoś interceptora, wrappera dla hibernate który by logował przy jakim zapytaniu występuje problem. Znalazłem tylko XRebel, ale czy ktoś wie o jakiejś bibliotece do tego ?
Ja kojarze tylko przy użyciu testów:
https://vladmihalcea.com/2014/02/01/how-to-detect-the-n-plus-one-query-problem-during-testing/
Po prostu trzeba znać swój przypadek użycia i zapytanie pisać pod niego (ładować graf encji który wiemy że będzie potrzebny)
Gdyby tak móc wyłapać wszystkie przypadki, kiedy Hibernate wykonuje zapytanie spowodowane przez lazy loading. Chyba nie ma takich narzędzi. Ale zrobić to można prosto. AspectJ i tylko jeden dobry pointcut. Powstaje z tego spatchowany jar hibernate, który wystarczy podłożyć, żeby dostać odpowiedni log.
Potem już tylko odcedzić taki log i przeanalizować poszczególne przypadki. A na testach to nawet sobie można rzucać Exception przy wykryciu lazy loading. Do tego jakaś pula dozwolonych wywołań. To wszystko się da przez AspectJ.
@jarekczek: Hmm problem jest taki, że aspekt powinien być w zakresie transakcji.. może dało by się to w sumie zrobić mamy transakcje potem zliczamy wywołania zapytań a na końcu porównać ze statystykami hibernate.
Ilość zapytań możesz zliczyć ale po co b będziesz porównywał ze statystykami??