Oracle Database JDBCドライバー、12より前のバージョン:
ドライバは、各列の最大サイズにfetchSize
の行数を掛けたものを割り当てます。 クエリを実行する前。
たとえば、VARCHAR(4000)
の場合 列は、fetchSize
の8kバイトを割り当てます 。
バージョン12(およびそれ以降):
fetchSize
の行ごとに列ごとに約15バイトを割り当てます クエリを実行する前。実行後、バージョン12のドライバーは、実際の行データを格納するために必要な量だけを割り当てます。
その結果、バージョン12のドライバーは通常、以前のバージョンのドライバーよりも大幅に少ないメモリを使用します。
あなたの例 :
あなたの例では、VARCHAR(20)
最大40バイト、NUMBER
最大22バイトでVARCHAR(100)
にすることができます 100バイトもの大きさ。 fetchSize
を使用 100に設定すると、古いドライバーは(40 + 22 + 100) * 100 = 16k
を割り当てます。 。バージョン12のドライバーは、3 * 15 * 100 = 4.5k
を割り当てます。 。私が無視している両方のドライバーに追加のオーバーヘッドがあります。