Oracle
 sql >> Base de données >  >> RDS >> Oracle

Allocation de mémoire Oracle JDBC lors de la récupération d'un jeu de résultats

Pilote JDBC Oracle Database, versions antérieures à 12 :

Le pilote alloue la taille maximale pour chaque colonne multipliée par le nombre de lignes dans fetchSize avant d'exécuter la requête.

Par exemple pour un VARCHAR(4000) colonne, il allouera 8k octets multipliés par fetchSize .


versions 12 (et ultérieures) :

Il alloue environ 15 octets par colonne par ligne dans le fetchSize avant d'exécuter la requête. Après l'exécution, le pilote de la version 12 n'alloue que la quantité nécessaire pour stocker les données de ligne réelles.

Par conséquent, les pilotes de la version 12 utilisent généralement beaucoup moins de mémoire que les pilotes des versions précédentes.


Votre exemple :

Dans votre exemple, un VARCHAR(20) peut être aussi gros que 40 octets, un NUMBER peut être aussi grand que 22 octets et un VARCHAR(100) aussi grand que 100 octets. Avec le fetchSize réglé sur 100, les anciens pilotes alloueraient (40 + 22 + 100) * 100 = 16k . Le pilote version 12 allouerait 3 * 15 * 100 = 4.5k . Il y a une surcharge supplémentaire dans les deux pilotes que j'ignore.