H2Databaseを追っかけていたりしたブログ

H2 database のリリースノートを読んだりとか。

Version 1.2.140 (2010-07-25)

今回はちょっと多いな、という感じ。キャッシュ周りの処理や、いくつかのパラメータのデフォルト値が改善されています。あと、共通表式(Common table expressions)が実験的ですがサポートされました。既にバグが挙げられている状況なので、まだしばらくは実用的には使えなさそうです。

  • デフォルトのMAX_LOG_SIZEが2MBから16MBに。特定のユースケースでは3倍速くなったとの事。
  • キャッシュメモリの取り扱いを改善
  • h2.lobInDatabase使用時の保存方法が変更。h2.lobInDatabaseを使用している既存のデータベースは再構築が必要。
  • 実際に利用されているリソースのみがメモリに読み込まれるようになった? 400kb程度メモリ使用量の削減。
  • SHUTDOWN COMPACTが速くなった
  • 大量のデータを削除した後、大きなデータベースを開くと非常に遅かったのを改善。
  • LOG=0,LOG=1の時のパフォーマンスが改善(LOG=0 トランザクションログが無効、LOG=1 トランザクションログ有効、FileDescriptor.syncが無効。電源断などの問題の対処が必要ない場合。通常は、LOG=2 トランザクションログが有効で、チェックポイントごとにFileDescriptor.syncが行われる)
  • 組み込みのプロファイラのデフォルト値変更
  • たくさんのテーブル(特にテンポラリテーブル)のcreate/dropを行った後、プロセスをkillするとデータベースがオープンできなくなる場合がある問題の修正
  • コンソールのビルトインコマンドに@sleepが追加
  • EXPLAIN ANALYZEで、読み込んだページ数も表示されるようになった。※下記の、total:9というところ。
sql> explain analyze select * from hoge;
PLAN
SELECT HOGE.ID
FROM PUBLIC.HOGE /* PUBLIC.HOGE.tableScan */ /* scanCount: 2001 */
/*
total: 9
HOGE.HOGE_DATA read: 9 (100%)
*/
(1 row, 62 ms)
  • null safe equalがサポートされた。ANSI SQLにこんな構文あるんですねえ...。
sql> select * from fuga;
ID         |DATA
null       |hoge
1          |fuga
(2 rows, 31 ms)

sql> select * from fuga where id is null;
ID         |DATA
null       |hoge
(1 row, 0 ms)

sql> select * from fuga where id is 1;
ID         |DATA
1          |fuga
(1 row, 0 ms)

sql> select * from fuga where id is distinct from 1;
ID         |DATA
null       |hoge
(1 row, 0 ms)

sql> select * from fuga where id is distinct from null;
ID         |DATA
1          |fuga
(1 row, 0 ms)

その他、データベースファイルが大きくなったり、色々バグフィックスが行われたり、というところ。