JPA mierzenie czasu operacji, dziwne wartosci

0

w swojej aplikacji testuje predkosc metod zapisu do bazy danych rekordow przez repozytorium JPA. Do testow uzywam bazy H2 lub Derby.
NIestety osiagam bardzo dziwne wyniki.

    public BulkTestResult testBulkInsertScenario(Long volume, Integer repeat) {
        StopWatch sw = new StopWatch();
        BulkTestResult bulkTestResult = new BulkTestResult();
        bulkTestResult.setStartDate(Instant.now());
        bulkTestResult.setCountTest(volume);
        bulkTestResult.setTestRepeat(repeat);
        familyRepository.deleteAll();
       for(int i =0; i < repeat; i++) {
           List<ProjectEntity> projects = dataAnonymization.generateProjectEntityList(volume);
           runBulkTest(sw, bulkTestResult, projects, true);
       }
        bulkTestResult.setEndDate(Instant.now());
        return bulkTestResult;
    }

    private void runBulkTest(StopWatch sw, BulkTestResult bulkTestResult, List<ProjectEntity> projects, boolean resetAfter) {
        sw.reset();
        sw.start();
        familyRepository.saveAll(projects);
        sw.stop();
        bulkTestResult.addMsSpeedResult(sw.getTime());
        if (resetAfter) familyRepository.deleteAll();
        sw.reset();
    }

Test uruchamiany jest Dla 10k rekordow. i 10 powtorzen

Test1: W 1 petli 242ms, kolejne petle 60ms, 40ms, 24ms ....
Test2: : w przedziale 38-22ms
Test3 : okolo 24-22ms

Zastanawiam sie skad biora sie te roznice i jak temu zaradzic ? Czy ma to zwiazek z cachem w Hibernate ?

0
  1. Tak się nie testuje prędkości wykonania, tylko tak
  2. W nawiązaniu do 1 pkt, nie uwzględniasz warmupu JVM i JIT w ten sposób
0

Ad. cache Hibernate - kiedy jest czyszczony w Twojej aplikacji?

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