Mam pewne problemy z wydajnością podczas hibernacji, ponieważ zbyt wiele razy trafiają do bazy danych. Zbadam niektóre strategie pobierania. Chcę napisać kilka funkcjonalnych testów jednostkowych, aby moja aplikacja ewoluowała. Widzę, jak wiele instrukcji SQL jest wywoływanych.Policz instrukcje SQL w trybie hibernacji
Chcę wiedzieć, czy mogę policzyć, jak wiele instrukcji SQL są wywoływane. W tej chwili ustawiam show-sql na true, a następnie zliczam SQL w konsoli. Chcę to zrobić w kodzie, jeśli to możliwe. Czy można zliczyć, ile hibernacji SQL trafia do DB z kodem?
Dzięki
EDIT
Po @Aleksander Blomskøld odpowiedzi ....
Mój przypadek testowy jest
StatisticsService statisticsService = new StatisticsService();
Session session = entityManager.unwrap(Session.class);
statisticsService.setSessionFactory(session.getSessionFactory());
statisticsService.setStatisticsEnabled(true);
List<MyType> r= entityManager.createQuery("from MyType", MyType.class).getResultList();
System.out.println(statisticsService.getQueryExecutionCount());
System.out.println(statisticsService.getQueries()[0]);
Hrabia wykonania zapytania jest podawana jako 1, a jeśli Patrzę na zapytanie, które mówi, że jest "od MyType"
Jednak w instrukcjach sql znajdujących się w logu widzę, że istnieją instrukcje SQL do pobrania MyType i wielu powiązanych klas. Tak naprawdę chcę znać wszystkie SQL, które trafiają do bazy danych z powodu wywołania "od MyType".
Czy to, czego wymagam, jest bardziej przejrzyste? Albo ja po prostu nadużywanie StatisticService
Dzięki
baza danych prawdopodobnie nie ma lepszych sposobów, aby uzyskać heurystyki na ten temat niż „liczenie zapytania SQL”. Myślę, że masz na myśli "liczenie instrukcji SQL" btw. –
poprawne @tieTYT to oświadczenia - zaktualizowałem kod – RNJ
Być może mógłbyś rozważyć NProf? –