Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Das Iterieren eines ResultSets mit JDBC für Oracle dauert etwa 16 Sekunden?

Ich habe eine Tabelle mit 4000 Zeilen und 10 Spalten mit jeweils 10 Zeichen erstellt und einen einfachen Leistungstest mit dem folgenden Ansatz durchgeführt (RealTimeCounter ist eine Klasse, die die Echtzeit zwischen start() misst und 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);

Ergebnisse:

  • Standardabrufgröße:Ausführungszeit beträgt ca. 20 Sek.
  • fetch size =100:Ausführungszeit beträgt ca. 2,2 Sek.
  • fetch size =500:Ausführungszeit beträgt ca. 450 ms
  • fetch size =2000:Ausführungszeit beträgt ca. 120 ms
  • fetch size =4000:Ausführungszeit beträgt ca. 50 ms
  • fetch size =4001:Ausführungszeit beträgt ca. 10 ms (!!)

Die Abrufgröße passt also haben einen erheblichen Einfluss auf die Ausführungsgeschwindigkeit.

Beachten Sie, dass andererseits die Abrufgröße einen gewissen Einfluss auf den Speicherverbrauch hat. Interessanterweise eine schnelle Analyse mit Runtime.getRuntime().freeMemory(); Vor und nach dem obigen Code zeigte sich jedoch, dass die Auswirkungen viel geringer sind, als ich erwarten würde. Die Zahlen, die ich bekam, sind:

  • Standardabrufgröße:665 KB
  • Abrufgröße =100:665 KB
  • Abrufgröße =500:665 KB
  • Abrufgröße =2000:743 KB
  • Abrufgröße =4000:821 KB
  • Abrufgröße =4001:861 KB