Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle JDBC-Speicherzuweisung beim Abrufen einer Ergebnismenge

Oracle Database JDBC-Treiber, Versionen vor 12:

Der Treiber weist jeder Spalte die maximale Größe multipliziert mit der Anzahl der Zeilen in fetchSize zu vor der Ausführung der Abfrage.

Zum Beispiel für einen VARCHAR(4000) Spalte werden 8k Bytes mal fetchSize zugewiesen .


Versionen 12 (und höher):

Es weist ungefähr 15 Bytes pro Spalte und Zeile in fetchSize zu vor der Ausführung der Abfrage. Nach der Ausführung weist der Treiber in Version 12 nur so viel zu, wie zum Speichern der tatsächlichen Zeilendaten erforderlich ist.

Daher verbrauchen die Treiber der Version 12 in der Regel wesentlich weniger Speicher als die Treiber der früheren Versionen.


Ihr Beispiel :

In Ihrem Beispiel ein VARCHAR(20) kann bis zu 40 Bytes groß sein, eine NUMBER kann bis zu 22 Bytes groß sein und ein VARCHAR(100) sein so groß wie 100 Bytes. Mit der fetchSize auf 100 gesetzt würden die älteren Treiber (40 + 22 + 100) * 100 = 16k zuweisen . Der Treiber der Version 12 würde 3 * 15 * 100 = 4.5k zuweisen . Es gibt zusätzlichen Overhead in beiden Treibern, den ich ignoriere.