0

2M レコードを含む DB の PostgreSQL で Criteria.scroll() を実行しています。メモリが増え続け、最終的に OutOfMemoryException が生成されます。これを修正する方法についてアドバイスをお願いします。

Postgresql DB バージョン: 8.4 使用する Postgresql ドライバー: postgresql-8.4-701.jdbc4.jar

PostgreSQL の Hibernate scroll() に関する既知の問題はありますか?

ガイダンス/提案に感謝します。

4

4 に答える 4

4

session.clear()Hibernate セッションからオブジェクトをクリアするには、定期的に呼び出す必要があります。例えば:

while(results.next()) {
  processResults(results);
  getSession().clear();
}

ループの 100 回程度の反復ごとにセッションをクリアしたいだけかもしれません。何が最善かを確認するために、いくつかの異なる方法で時間を計ります。

于 2012-01-03T23:37:56.787 に答える
0

これが大きすぎる場合は、クエリにsetFetchSize(XXX)を追加する必要があります

于 2013-06-10T16:14:18.600 に答える
-4

System.gc() を時々呼び出す必要があります (たとえば、処理する 1000 レコードごとに)。または、一度に多くのオブジェクトをフェッチしないでください。setMaxResults(int) および setFirstResult(int) メソッドを使用して、より小さいデータ サブセットをフェッチします。たとえば、一度に 10K レコード、次に System.gc()、次に次のバッチなどです。

于 2009-12-23T01:21:18.597 に答える