Sono in esecuzione query su Oracle 10g con JDBC (utilizzando i driver più recenti e UCP come DataSource) per recuperare i CLOB (con 20 caratteri medi). Tuttavia, le prestazioni sembrano essere piuttosto negative: il recupero in batch di 100 LOB richiede in media 4 secondi. L'operazione non è né I/O, né CPU né rete legata a giudicare dalle mie osservazioni.Prestazioni Oracle CLOB
La mia configurazione di prova si presenta così:
PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();
dataSource.setConnectionFactoryClassName("...");
dataSource.setConnectionPoolName("...");
dataSource.setURL("...");
dataSource.setUser("...");
dataSource.setPassword("...");
dataSource.setConnectionProperty("defaultRowPrefetch", "1000");
dataSource.setConnectionProperty("defaultLobPrefetchSize", "500000");
final LobHandler handler = new OracleLobHandler();
JdbcTemplate j = new JdbcTemplate(dataSource);
j.query("SELECT bigClob FROM ...",
new RowCallbackHandler() {
public void processRow(final ResultSet rs) throws SQLException {
String result = handler.getClobAsString(rs, "bigClob");
}
});
}
ho sperimentato con le dimensioni prelevare ma senza alcun risultato. Sto facendo qualcosa di sbagliato? C'è un modo per accelerare il recupero di CLOB quando si utilizza JDBC?
Come è stato determinato che non è collegato alla rete? Stai parlando di impostare una nuova connessione JDBC (costosa), 2 MB di dati da leggere dal disco, inviarlo tramite la rete e il sovraccarico della query (che non è specificato). Non so se 4s è così male a seconda del layout di rete e della configurazione del database. – Gandalf
Chiarimento: Misuro in * unità * di 100 quindi la penalità iniziale di collegamento non conta. Il throughput di rete totale rimane inferiore a 2 Mbit/s, quindi suppongo che non sia legato alla rete. – yawn
Quanto dura la query effettiva? – Gandalf