読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

Hibernate3.2のNative Queryのメモリリーク

どうもHibernate3.2のNative Queryはメモリリークするようです。forum.hibernate.org
stackoverflow.com
HibernateはエンティティだけでなくSQLもキャッシュしているようです。そのキャッシュがメモリを食います。
soft referenceになっているので小規模なシステムならヒープが減ってきたときに解放されるので特に実害にはつながらないと思われます。ヒープサイズが大きかったり短時間に大量のSQLを発行するようなシステムはトラブルにつながるかもしれません。

Hibernate3.6以降はキャッシュのサイズを指定できるようです。
hibernate.query.plan_cache_max_soft_references
hibernate.query.plan_cache_max_strong_references

Hibernateは自前で同じような仕組みを作るコストが大幅に省けますがN+1問題があったりうっかりDBから大量にオブジェクトを読み込んだりいろいろ扱いが難しいです。大量のトラフィックがあるシステムは高機能なライブラリを使うよりできるだけ素の状態で作るか素に近いシンプルなものを使うほうがいいのかもしれない気がしてきました。

オープンソースだからまだいいですけどね。ソースなかったらお手上げです。