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

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

Version 1.4.183 Beta (2014-12-13)

MVStore周りの改修が続く。そういえば、先日送ったパッチが取り込まれた。1.4.186に含まれるはず。

  • MVStore: デフォルトのオートコミット用のバッファのサイズが2倍になった。これにより大量のデータをインサートした後のデータファイルのサイズが削減される。
  • 組み込み関数の"power"と"radians"の返り値がdoubleになった
  • アウタークエリがそのビューに対する制約を含んでいて、"row_number" や "rownum" がビューや元のテーブルに含まれている場合予期せぬ結果が返ってきていた。例) select b.nr, b.id from (select row_number() over() as nr, a.id as id from (select id from test order by name) as a) as b where b.id = 1
    • なんかよく分からない。原文は'Using "row_number" or "rownum" in views or derived tables had unexpected results if the outer query contained constraints for the given view.'
  • MVStore: リカバーツールがより多くのタイプのファイルの不整合に対応できるようになった。
  • MVStore: TransactionStoreが使用可能になる前に初期化を必要とするようになった。
  • イコールと範囲指定の条件を同一のカラムに対して指定したビューもしくは派生テーブルが正しく動作していなかった。例) select x from (select x from (select 1 as x) where x > 0 and x < 2) where x = 1
  • データベースURLのPAGE_SIZE設定がMVStoreでも使われるようになった。
  • MVStore: 永続化ストアに置けるデフォルトのページ分割サイズが4096バイトになった(以前は、16KBであった) これによりほとんどの場合でデータベースファイルのサイズが小さくなるはず(幾つかのケースでは前のバージョンの半分以下になる)
  • CLOB もしくは BLOBを含むテーブルへのオートアナライズが動作していなかった。
  • MVStore: リファレンスカウンティングが正しく動作していなかったとしても使用済みのチャンクが上書きされないように、リファレンスカウンティングの代わりに、マークアンドスイープGCアルゴリズムの使用。
  • マルチスレッドモードで、バックグラウンドでのカラムのセレクティビティの更新が時々うまく動作していなかった。
  • マルチスレッドモードで、スキーマを更新した(例えばテーブルをドロップした)際に、データベースのメタデータの操作が動作しないことがあった。
  • オリジナルの行が削除されたらCLOBやBLOBの値が読めなかった(MVCCモードを使っているときであっても)
  • MVStoreTool がIllegalArgumentExceptionをスローしていた
  • dateやtime,timestampの変換処理のパフォーマンスの改善
  • H2 Console: 組み込みのWebサーバが不明なファイルをリクエストされた際に適切に動作していなかった
  • MVStore: jarファイルが "h2-mvstore-*.jar" にリネームされ、Mavenに別個にデプロイされるようになった
  • MVStore: 並列読み書き有効がデフォルトになった
  • Server mode: 転送用のバッファサイズが16KBから64KBに変更された。これによりLinux上で大幅にパフォーマンスが改善された。
  • H2 Console and server mode: Poodle SSLv3 脆弱性のために、SSLが無効にして、TLSを使うようにした。セキュアな匿名コネクションを有効にするためのシステムプロパティ"h2.enableAnonymousTLS"が追加された。デフォルトの証明書は自己署名証明書なので、中間者攻撃を回避するためには、手動で証明書をインストールする必要がある。
  • MVStore: R-Treeがメモリの使用量を正確に見積もれていなかった
  • MVStore: R-Treeでのストアのコンパクト化が常に動作していなかった。
  • Issue 581: LOCK_MODE=0で動作しているとき、JdbcDatabaseMetaData#supportsTransactionIsolationLevel(TRANSACTION_READ_UNCOMMITTED)はfalseを返すべき
  • 複数コネクションが同時に同じテーブルにアクセスした場合にデッドロックが発生する不具合を修正
  • コードの複数の部分で、"SET MAX_MEMORY_ROWS x"コマンドに対して値をセットしていなかった(?)
    • 原文 "Some places in the code were not respecting the value set in the "SET MAX_MEMORY_ROWS x" command"
  • 巨大な(4000万行以上)行をユニオンする際にNegativeArraySizeExceptionが生成される不具合を修正
  • MySQLとの互換性のために"USE schema"をフィックス(?)
    • 原文 "Fix "USE schema" command for MySQL compatibility, patch by mfulton"
  • MySQLの ROW_FORMAT=DYNAMIC をパースして無視するようにした