sql >> Database >  >> RDS >> Oracle

Rijen ophalen met extreem hoge snelheid

Ervan uitgaande dat u de basisnetwerkdingen zoals interfaces, firewalls, proxy's en ook de hardware-elementen van de DB-server al hebt gecontroleerd.

Optie 1:

In plaats van:

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

probeer :

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

Meer details hier

Optie 2:Ophaalgrootte

Zoals Stephen sterk heeft aangegeven, lijkt de fetchmaat te groot.

En, voor een ophaalgrootte van 500.000, wat is uw -Xms en -Xmx. Ook, in profiler, wat is de hoogste heapgrootte?

Optie 3:DB

  • Controleer indexen en queryplan voor src_schema.big_table_view

  • Is dit een tool of een applicatiesysteem. Als het maar een hulpmiddel was, zou je parallelle graden, indexhints, partitionering enz. kunnen toevoegen op basis van DB-systeemmogelijkheden

Optie 4:Discussies

Zeg n

U kunt n . starten Threads van schrijver, elk geconfigureerd om een ​​bepaalde bucket te verwerken, b.v. thread1 verwerkt 0 tot 10000, schrijven naar n verschillende bestanden, en als alle koppen klaar zijn, voeg je na het samenvoegen de bestanden samen, bij voorkeur met een OS-commando op laag niveau.

Dat gezegd hebbende, dit alles mag nooit een vooraf gedefinieerde code zijn zoals het nu is. 'n' en de buckets moeten tijdens runtime worden berekend. En het creëren van meer threads dan wat uw systeem ondersteunt, verpest alleen maar.

Optie 5:

In plaats van

select * from src_schema.big_table_view

Je zou kunnen gebruiken

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

Dit vermijdt het maken van 500000 StringBuilders en Strings . (Ervan uitgaande dat er geen andere complexe opmaak bij betrokken is). CHR(9) is het tabteken.

Optie 6 :

In de tussentijd kunt u ook contact opnemen met uw DBA voor eventuele problemen met het DB-systeem en een SR melden bij Oracle-ondersteuning .



  1. MySQL ODBC-probleem:naam van gegevensbron niet gevonden en geen standaardstuurprogramma opgegeven

  2. SQL-instructie om dubbele records te selecteren die meer dan 2 keer voorkomen

  3. Datumnotatie wijzigen in SSIS

  4. hoe de kolomwaarde slechts één keer wordt weergegeven als deze wordt herhaald en leeg is totdat een andere waarde in sql komt