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

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

Version 1.3.146 Beta (2010-11-08)

1.3系のプレビュー版です。

  • これはベータバージョンです。次のバージョンは1.2.147となります。1.2系と1.2系の相違点は以下の通り:
  • 1.3系では、h2.lobInDatabase(CLOB/BLOBをデータベースファイル中に持つ)はデフォルトで有効となります。
  • 1.3系では、ANALYZE_AUTO(自動アナライズ)は2000となります。
    • テーブルごとに2000回変更が発生すると自動でアナライズが走ることになります
  • 1.3系では、DB_CLOSE_ON_EXIT (シャットダウンフック)はデフォルトで無効となります。
  • 1.3系では、DROP_RESTRICT(DROPに対するデフォルトのアクションをRESTRICTとする)は有効になります。
  • 1.3系では、FUNCTIONS_IN_SCHEMA(functionをスキーマ内に保持する)は有効になります。
  • 1.3系では、LARGE_TRANSACTIONS(巨大なトランザクションのサポート)は有効になります。主キー以外の変更はディスクにバッファされます。
  • 1.3系では、MAX_MEMORY_ROWS_DISTINCT は 10000がセットされます。
    • オンメモリで保持されるDISTINCTの結果セット。これを超えるとテンポラリテーブルが使用されます。
  • 1.3系では、NESTED_JOINS (ネステッドジョインと右外部結合) は有効になります。
  • 1.3系では、OPTIMIZE_INSERT_FROM_SELECT (CREATE TABLE ... AS SELECTのスピードアップ)は有効になります。
  • 1.3系では、OPTIMIZE_OR (可能であれば、OR条件をIN(..)に変換する) は有効になります。
  • 1.3系では、QUERY_CACHE_SIZEは有効になります。
  • 1.3系では、SELECT_FOR_UPDATE_MVCC (MVCC と SELECT FOR UPDATE)は有効になります。
  • 1.3系では、RUNSCRIPT と SCRIPT (コマンドラインとツール)では、UTF-8がデフォルトになります(ScriptCommand.charset).
  • 1.3系では、Lucene3がデフォルトで使用されます(Issue 147)
  • システムプロパティのh2.lobInDatabaseがセットされている場合に、テーブルが必要ない場合でもデータベースのクローズ時に常にLOBテーブルが作成されていた
  • MySQLモードで、SHOW TABLESが動作していなかった。また、メタデータテーブルがケースインセンシティブではなかった。更新可能ResultSetが期待通りに動作していなかった。Issue 249
  • コネクションにより作成されるCLOB/BLOBオブジェクトに対して、Clob.setCharacterStream(1), Clob.setString(1, s), Blob.setBytes(1, x), Blob.setBinaryStream(1)が使用できるようになった。Issue 235
  • とても小さなCLOBをBLOBに変換しようとするとNullPointerExceptionが発生していた。
  • INFORMATION_SCHEMA.SETTINGS: 現在のページ数として、select * from information_schema.settings where name = 'info.PAGE_COUNT'が使えるようになった
  • 不正な値例外のパラメータ名と値がいくつかの箇所で入れ替わっていた
  • trace level 3の時、データベースオープン時に、EOFExceptionを記録しないようになった(それが期待されている振る舞いなので)
    • ちょっとよくわからない
  • CALLが返り値がResultSetであるJava Functionを呼び、返り値がNullだった場合に、ClassCastExceptionが発生していた
  • SELECT ... FROM CSVREADがテンポラリファイルを作らないようになった。大きなインポートの場合に、2倍速くなるケースがあります。