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

Abrufen von Zeilen mit extrem hoher Geschwindigkeit

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 n

Sie können 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.

Das alles sollte jedoch niemals vordefinierter Code sein wie jetzt. 'n' und die Buckets sollten zur Laufzeit berechnet werden. Und das Erstellen von mehr Threads als das, was Ihr System unterstützt, vermasselt nur.

Option 5:

Statt

select * from src_schema.big_table_view

Sie könnten

verwenden
SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view

Dadurch wird die Erstellung von 500000 StringBuilders vermieden und Strings . (Unter der Annahme, dass keine andere komplexe Formatierung erforderlich ist). CHR(9) ist das Tabulatorzeichen.

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 .