My Oracle Support Banner

文字列型のOUT引数を持つストアド・プロシージャのクエリーを実行した時、JDBCステートメントが最大バッファサイズを使用し、大量のJVMメモリの使用やOutOfMemoryErrorを引き起こす (Doc ID 1676720.1)

Last updated on NOVEMBER 29, 2019

適用範囲:

JDBC - バージョン 11.2.0.3.0 以降
この文書の内容はすべてのプラットフォームに適用されます。

現象

文字列を返すストアド・プロシージャまたはファンクションをコールするクエリを実行する場合、JDBC アプリケーションが必要以上のJVM メモリを使用することがあります。
期待された結果は非常に小さいにも関わらず、選択された文字列に最大のバッファ・サイズが割り当てられていることは、結果セット・メタ・データから確認できます。
最終的には、処理遅延やメモリ不足エラーを引き起こす可能性があります。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.reflect.Array.newArray(Native Method)
at java.lang.reflect.Array.newInstance(Array.java:52)
at oracle.jdbc.driver.BufferCache.get(BufferCache.java:226)
at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7672)
at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java:1005)
at oracle.jdbc.driver.OracleStatement.check_row_prefetch_changed(OracleStatement.java:3080)
at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:321)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:277)
at TestJDBC.main(TestJDBC.java:62)


次は、小さなクエリをベースにした例です。

ストアド・プロシージャ:

 

原因

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


本書の内容
現象
 ストアド・プロシージャ:
 SQL文:
 診断プログラム:
 結果:
 Eclipse Memory Analyzerを使ったメモリ・ヒープの例:
原因
解決策

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.