Oracle
 sql >> Database >  >> RDS >> Oracle

L'iterazione di un ResultSet utilizzando JDBC per Oracle richiede molto tempo circa 16 secondi?

Ho impostato una tabella con 4000 righe e 10 colonne con 10 caratteri ciascuna e ho eseguito un semplice test delle prestazioni utilizzando il seguente approccio (RealTimeCounter è una classe che misura il tempo reale tra start() e 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);

Risultati:

  • Dimensione di recupero predefinita:il tempo di esecuzione è di ca. 20 secondi
  • dimensione recupero =100:il tempo di esecuzione è di circa 2,2 secondi
  • dimensione recupero =500:il tempo di esecuzione è di circa 450 msec
  • dimensione recupero =2000:il tempo di esecuzione è di circa 120 msec
  • dimensione recupero =4000:il tempo di esecuzione è di circa 50 msec
  • dimensione recupero =4001:il tempo di esecuzione è di circa 10 msec (!!)

Quindi, la dimensione del recupero fa hanno un impatto significativo sulla velocità di esecuzione.

Si noti che, d'altra parte, la dimensione del recupero ha un impatto sul consumo di memoria. È interessante notare che una rapida analisi utilizzando Runtime.getRuntime().freeMemory(); prima e dopo il codice sopra ha mostrato che l'impatto è molto inferiore a quello che mi aspetterei, però. I numeri che ho ottenuto sono:

  • Dimensione di recupero predefinita:665k
  • dimensione di recupero =100:665k
  • dimensione di recupero =500:665k
  • dimensione recupero =2000:743k
  • dimensione di recupero =4000:821k
  • dimensione di recupero =4001:861k