sql >> Databasteknik >  >> RDS >> Oracle

Hämta rader i extremt hög hastighet

Förutsatt att du redan har kontrollerat de grundläggande nätverksgrejerna som gränssnitt, brandväggar, proxyservrar, liksom även DB-serverns hårdvaruelement.

Alternativ 1 :

Istället för :

Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");

försök använda :

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");

Mer information här

Alternativ 2:Fetchsize

Som starkt påpekade av Stephen, verkar apportstorleken för stor.

Och för en hämtningsstorlek på 500 000, vad är din -Xms och -Xmx. Dessutom, i profiler, vad är den högsta högstorleken?

Alternativ 3:DB

  • Kontrollera index och frågeplan för src_schema.big_table_view

  • Är detta ett verktyg eller ett applikationssystem. Om du bara är ett verktyg kan du lägga till parallella grader, indextips, partitionering etc baserat på DB-systemkapacitet

Alternativ 4:Trådar

Säg n

Du kan starta n Trådar av writer, var och en konfigurerad att bearbeta en viss hink, t.ex. tråd1 bearbetar 0 till 10000, skriver till n olika filer, och när alla annonser är klara, post join, slå ihop filerna, helst med hjälp av ett OS-kommando på låg nivå.

Som sagt, allt detta bör aldrig vara fördefinierad kod som nu. 'n' och hinkarna bör beräknas vid körning. Och att skapa fler trådar än vad ditt system stöder försvårar bara.

Alternativ 5 :

Istället för

select * from src_schema.big_table_view

Du kan använda

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

Detta undviker att skapa 500 000 StringBuilders och Strings . (Förutsatt att ingen annan komplex formatering är inblandad). CHR(9) är tabbtecknet.

Alternativ 6 :

Under tiden kan du också kontrollera med din DBA för eventuella DB-systemproblem och ta upp en SR med Oracle-support .



  1. Konvertera Int32 till Oracle number(5) med EF4

  2. Hämta MySQL-data med where-klausuler

  3. Behöver hjälp med sql-fråga för att hitta saker taggade med alla angivna taggar

  4. Ladda data i fil, skillnad mellan Windows och Linux