Supponendo che tu abbia già controllato le cose di rete di base come interfacce, firewall, proxy, così come anche gli elementi hardware del server DB.
Opzione 1 :
Invece di :
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");
prova a usare :
OracleDataSource ods = new OracleDataSource();
java.util.Properties prop = new java.util.Properties();
prop.setProperty("MinLimit", "2");
prop.setProperty("MaxLimit", "10");
String url = "jdbc:oracle:oci8:@//xxx.xxx.xxx.xxx:1521/orcl";
ods.setURL(url);
ods.setUser("USER");
ods.setPassword("PWD");
ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheProperties (prop);
ods.setConnectionCacheName("ImplicitCache01");
Maggiori dettagli qui
Opzione 2:Recupera
Come fortemente sottolineato da Stephen, il fetchsize sembra troppo grande.
E, per dimensioni di recupero di 500.000, qual è il tuo -Xms e -Xmx. Inoltre, nel profiler, qual è la dimensione dell'heap più alta?
Opzione 3:DB
-
Controlla gli indici e il piano di query per
src_schema.big_table_view
-
È uno strumento o un sistema applicativo. Se fosse solo uno strumento, potresti aggiungere gradi paralleli, suggerimenti sull'indice, partizionamento ecc. in base alle capacità dei sistemi DB
Opzione 4:discussioni
Dì
Puoi iniziare
Detto questo, tutto questo non dovrebbe mai essere un codice predefinito come adesso.
Opzione 5 :
Invece di
Potresti usare
Questo evita di creare 500000
Opzione 6 :
Nel frattempo, puoi anche verificare con il tuo DBA eventuali problemi con il sistema DB e inviare una richiesta di assistenza con Supporto Oracle
.n
n
Thread di writer, ciascuno configurato per elaborare un determinato bucket, ad es. thread1 elabora da 0 a 10000, scrivendo su n
file diversi e, una volta che tutti gli annunci sono stati completati, eseguire il post join, unire i file insieme preferibilmente utilizzando un comando del sistema operativo di basso livello.'n'
e i bucket devono essere calcolati in fase di esecuzione. E creare un numero di thread in più rispetto a quello che supporta il tuo sistema è solo un errore.select * from src_schema.big_table_view
SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view
StringBuilders
e Strings
. (Supponendo che non siano coinvolte altre formattazioni complesse). CHR(9) è il carattere di tabulazione.