Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Iteracja zestawu wyników przy użyciu JDBC for Oracle zajmuje dużo czasu, około 16 s?

Skonfigurowałem tabelę z 4000 wierszami i 10 kolumnami po 10 znaków każda i wykonałem prosty test wydajności przy użyciu następującego podejścia (RealTimeCounter to klasa, która mierzy czas rzeczywisty między start() i stop() ):

List<String> myResult = new ArrayList<>();
ResultSet rs = s.executeQuery("SELECT * FROM Performance");

RealTimeCounter rtc = new RealTimeCounter();
rtc.start();
while(rs.next()) {
    myResult.add(rs.getString(1));
}
rtc.stop();
System.out.println(rtc);

Wyniki:

  • Domyślny rozmiar pobierania:czas wykonania wynosi ok. 20 sekund
  • rozmiar pobierania =100:czas wykonania wynosi około 2,2 s
  • rozmiar pobierania =500:czas wykonania wynosi około 450 ms
  • rozmiar pobierania =2000:czas wykonania wynosi około 120 ms
  • rozmiar pobierania =4000:czas wykonania wynosi około 50 ms
  • rozmiar pobierania =4001:czas wykonania wynosi około 10 ms (!!)

Tak więc rozmiar pobierania tak mają znaczący wpływ na szybkość wykonywania.

Zauważ, że z drugiej strony rozmiar pobierania ma pewien wpływ na zużycie pamięci. Co ciekawe, szybka analiza przy użyciu Runtime.getRuntime().freeMemory(); przed i po powyższym kodzie pokazał, że wpływ jest znacznie mniejszy, niż bym się spodziewał. Otrzymałem następujące liczby:

  • Domyślny rozmiar pobierania:665 tys.
  • rozmiar pobierania =100:665 tys.
  • rozmiar pobierania =500:665 tys.
  • rozmiar pobierania =2000:743k
  • pobierz rozmiar =4000:821k
  • rozmiar pobierania =4001:861k


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zrobić wsadowe wstawianie do bazy danych Oracle za pomocą Pythona?

  2. 2 funkcje, które zwracają miesiąc z daty w Oracle

  3. Funkcja SINH() w Oracle

  4. Jak sprawdzić maksymalną liczbę dozwolonych połączeń z bazą danych Oracle?

  5. Integrator danych Oracle (ODI)