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.