:: DEVELOPER ZONE
InnoDB が ALTER TABLE DROP FOREIGN KEY をサポートするようになった。外部キーを破棄する場合は、SHOW CREATE TABLE を使って、内部で生成された外部キー ID を検出する必要がある。
SHOW INNODB STATUS で、最後に検出された FOREIGN KEY エラーおよび UNIQUE KEY エラーの詳細情報が出力されるようになった。InnoDB が CREATE TABLE からエラー 150 を返した原因がわからない場合は、このステートメントを使って原因を調査できる。
ANALYZE TABLE が InnoDB 型のテーブルでも動作するようになった。このステートメントは、各インデックスツリーをランダムに 10 箇所調べ、それに応じてインデックスのカーディナリティの推定値を更新する。これは推定値に過ぎないため、ANALYZE TABLE を実行するたびに異なる数値が生成される可能性があることに注意する。MySQL は、インデックスカーディナリティの推定値を結合の最適化でのみ使用する。適切に最適化されていない結合がある場合は、ANALYZE TABLE を試すことができる。
InnoDB のグループコミット機能が、MySQL のバイナリログがオンになっている場合も動作するようになった。グループコミットをアクティブにするには、クライアントスレッドの数が 3 つ以上でなければならない。
innodb_flush_log_at_trx_commit のデフォルト値が 0 から 1 に変更された。この新しいリリースでは、my.cnf でこの値を明示的に指定しないと値 1 が設定されるため、トランザクションコミットのたびにディスクへのログのフラッシュが発生してアプリケーションの実行速度が大幅に低下する。
設定可能な MySQL グローバルシステム変数 innodb_max_dirty_pages_pct が追加された。この変数は 0 〜 100 の整数である。
デフォルト値は 90。InnoDB のメインスレッドは、多くてもこのパーセンテージが常にフラッシュされずに残るように、バッファプールからページをフラッシュしようとする。
innodb_force_recovery=6 の場合に、InnoDB が破損ページを二重書き込みバッファに基づいて修復しないようになった。
バッファプール内のメモリをゼロに設定しないようになったため、InnoDB の起動が速くなった。
バグ修正: MySQL のコメント内に 'foreign key' というキーワードがあると、FOREIGN KEY 定義用の InnoDB パーサで混乱が生じていた。
バグ修正: FOREIGN KEY で参照されていたテーブルを破棄し、その後に一致しないカラム型で同じテーブルを作成すると、InnoDB が dict0load.c の dict_load_table() 関数でアサートする可能性があった。
バグ修正: GROUP BY および DISTINCT が NULL 値を不等として扱うことがあった。
また、インデックスの範囲が空である場合に、MySQL がネクストキーロックを実行できなかった。
バグ修正: MyISAM テーブルが更新されたときに現在のトランザクションはコミットされない。このため、バイナリロギングが有効であっても、CREATE TABLE では InnoDB トランザクションがコミットされない。
バグ修正: 削除が行われたテーブルは ON DELETE SET NULL で変更できなかったが、これを可能にして、カスケードされた操作で無限ループが生じないようにした。
バグ修正: 主キーでの一意の検索でカーソルを位置付けた後でも HANDLER PREV および NEXT を使用できるようになった。
バグ修正: MIN() または MAX() によってデッドロックまたはロック待ちのタイムアウトが発生した場合に、MySQL がエラーを返さずに、関数の値として NULL を返していた。
バグ修正: テーブルが破棄される際に、InnoDB が pthread_mutex_destroy() を呼び出していなかった。そのために、FreeBSD およびその他の Linux 以外の Unix システムでメモリリークが発生する可能性があった。
© 1995-2005 MySQL AB. All rights reserved.
