Angenommen, Sie haben bereits die grundlegenden Netzwerksachen wie Schnittstellen, Firewalls, Proxys sowie die Hardwareelemente des DB-Servers überprüft.
Möglichkeit 1:
Statt :
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");
versuchen Sie es mit :
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");
Weitere Einzelheiten hier
Option 2:Fetchsize
Wie Stephen nachdrücklich betonte, scheint die Fetchsize zu groß zu sein.
Und für eine Abrufgröße von 500.000, was sind Ihre -Xms und -Xmx. Außerdem, was ist im Profiler die höchste Heap-Größe?
Option 3:DB
-
Überprüfen Sie die Indizes und den Abfrageplan für
src_schema.big_table_view
-
Handelt es sich um ein Tool oder ein Anwendungssystem? Wenn es sich nur um ein Tool handelt, können Sie parallele Grade, Indexhinweise, Partitionierung usw. basierend auf den Fähigkeiten des DB-Systems hinzufügen
Option 4:Threads
Sagen Sie
Sie können
Das alles sollte jedoch niemals vordefinierter Code sein wie jetzt.
Option 5:
Statt
Sie könnten
Dadurch wird die Erstellung von 500000
Option 6:
In der Zwischenzeit können Sie sich auch bei Ihrem DBA nach Problemen mit dem DB-System erkundigen und eine SR beim Oracle-Support
einreichen .n
n
starten Writer-Threads, die jeweils für die Verarbeitung eines bestimmten Buckets konfiguriert sind, z. thread1 verarbeitet 0 bis 10000 und schreibt in n
verschiedene Dateien, und sobald alle Aufgaben erledigt sind, posten Sie die Verknüpfung und führen Sie die Dateien zusammen, vorzugsweise mit einem Low-Level-Betriebssystembefehl.'n'
und die Buckets sollten zur Laufzeit berechnet werden. Und das Erstellen von mehr Threads als das, was Ihr System unterstützt, vermasselt nur.select * from src_schema.big_table_view
SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view
StringBuilders
vermieden und Strings
. (Unter der Annahme, dass keine andere komplexe Formatierung erforderlich ist). CHR(9) ist das Tabulatorzeichen.