私は作業中のアプリケーションがデフォルトのフェッチサイズを使用していることに気づきました。問題は、大部分の場合、ユーザーが大量のデータ(数千から数十万に及ぶ)をフェッチし、デフォルトの10が実際には大きなボトルネックになっていることです。JDBC/Hibernate Fetchサイズとメモリの問題
したがって、ここでの明白な結論は、フェッチサイズを大きくすることです。最初は、デフォルト値を100に設定し、いくつかのクエリで1000に設定することを考えていました。しかし、ネット上では、メモリの問題を防ぐためにデフォルト値が小さすぎる(つまり、JVMヒープがそれほど多くのデータを処理できない場合)、私はそれについて心配すべきでしょうか?
これ以上の説明はありません。結果セットをフェッチしている間にフェッチサイズが大きくなるとオーバーヘッドが増えることを意味しますか?あるいは、デフォルトでは10レコードをフェッチしてGCをGCして別の10などをフェッチすることができます(一方で10000を一度にフェッチするとOutOfMemory例外が発生します)。このような場合は、とにかくメモリ内のすべてのレコードが必要なので、私は本当に気にしません。前者の場合(結果セットが大きければメモリのオーバーヘッドが大きくなります)、まずテストをロードする必要があります。
実際にフェッチサイズを10からバンプすると、100と言うことができます。私はヒープ上に90以上のjdbcオブジェクトしか取得できません。コール直後にGCedされます(ヒープに最大100個のjdbcオブジェクトがあります) ? –
はい、反復された 'ResultSet'に属する100個のjdbcオブジェクトです。少なくとも、合理的な実装と見なされます... JDBC仕様AFAIKでは強制されません。 – yair