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
システムでメモリリークが発生する可能性があった。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.