ローカルH2データベースにデータを保持するデスクトップアプリケーションがあります。Squerylを使用してデータベースに接続しています。
データベースのサイズは非常に小さいです(約10kB)。深刻なパフォーマンスの問題が発生しており、大量のディスクIOが実行されています。私はDBを読んでいるだけなので、完全なデータをキャッシュできると思っていました。キャッシュサイズをある値に設定することもできます(合計データベースサイズよりもはるかに大きい)。また、ロックを無効にしてみましたが、結果はありませんでした。
私のプログラムは、データベースに対して非常に多くの小さなクエリを実行します。TableModel
基本的に、すべてのテーブルエントリ(各行の各列)に対してクエリを実行するSwingがあります。これらの各呼び出しをSqueryltransaction
ブロックにラップしています。
JVisualVMを使用してプロファイルを作成しましたが、次の呼び出しツリーに問題があると思われます。一番上の方法は、私のコードからの読み取りアクセスです。
質問
どうすればこれを修正できますか、または何が間違っていますか?どういうわけか、1MB未満のメモリに保持できるほど小さいDBに対して多くの小さな呼び出しを行うことができるはずです。このディスクIOが発生しているのはなぜですか?どうすれば回避できますか?