Oracle
 sql >> Database >  >> RDS >> Oracle

Allocazione della memoria Oracle JDBC durante il recupero di un set di risultati

Driver JDBC Oracle Database, versioni precedenti alla 12:

Il driver alloca la dimensione massima per ogni colonna moltiplicata per il numero di righe nel fetchSize prima di eseguire la query.

Ad esempio per un VARCHAR(4000) colonna allocherà 8k byte per fetchSize .


versioni 12 (e successive):

Alloca circa 15 byte per colonna per riga nel fetchSize prima di eseguire la query. Dopo l'esecuzione, il driver nella versione 12 alloca solo quanto necessario per archiviare i dati di riga effettivi.

Di conseguenza, i driver della versione 12 utilizzano in genere una quantità di memoria notevolmente inferiore rispetto ai driver delle versioni precedenti.


Il tuo esempio :

Nel tuo esempio un VARCHAR(20) può essere grande quanto 40 byte, un NUMBER può essere grande quanto 22 byte e un VARCHAR(100) grande quanto 100 byte. Con il fetchSize impostato su 100 i driver meno recenti allocherebbero (40 + 22 + 100) * 100 = 16k . Il driver della versione 12 allocherebbe 3 * 15 * 100 = 4.5k . C'è un sovraccarico aggiuntivo in entrambi i driver che sto ignorando.