sql >> Databasteknik >  >> RDS >> Oracle

Oracle JDBC-minnestilldelning medan en resultatuppsättning hämtas

Oracle Database JDBC-drivrutin, versioner före 12:

Drivrutinen tilldelar den maximala storleken för varje kolumn gånger antalet rader i fetchSize innan du kör frågan.

Till exempel för en VARCHAR(4000) kolumnen kommer den att allokera 8k byte gånger fetchSize .


version 12 (och senare):

Den tilldelar ungefär 15 byte per kolumn per rad i fetchSize innan du kör frågan. Efter exekvering allokerar drivrutinen i version 12 endast så mycket som behövs för att lagra de faktiska raddata.

Som ett resultat använder version 12-drivrutiner vanligtvis betydligt mindre minne än de tidigare versionernas drivrutiner.


Ditt exempel :

I ditt exempel en VARCHAR(20) kan vara så stor som 40 byte, ett NUMBER kan vara så stor som 22 byte och en VARCHAR(100) så stor som 100 byte. Med fetchSize inställd på 100 skulle de äldre drivrutinerna tilldela (40 + 22 + 100) * 100 = 16k . Version 12-drivrutinen skulle tilldela 3 * 15 * 100 = 4.5k . Det finns ytterligare overhead i båda drivrutinerna som jag ignorerar.



  1. MySQL lagrad procedur infoga flera rader från listan

  2. pg_restore-fel:roll XXX existerar inte

  3. Gå igenom alla csv-filer i en katalog, hämta information från varje och lägga data i mysql-databasen

  4. Korrekt formaterad MySQL date insert-sats returnerar alla nollor