:: DEVELOPER ZONE
InnoDB が SQL ステートメント SAVEPOINT および ROLLBACK TO SAVEPOINT をサポートするようになった。構文については、http://www.innodb.com/ibman.php#Savepoints を参照。
CREATE TABLE t (a BLOB, INDEX (a(10))) のように、カラムプリフィックスキーを作成できるようになった。
Linux および FreeBSD の最新バージョンでは、O_DIRECT を innodb_flush_method として使用することもできる。ただし、これらのオペレーティングシステムで予想されるバグに注意する。
データページのチェックサム計算が修正された。以前は、OS のファイルシステムの破損がほとんど気付かれなかった。4.0.14 以降のバージョンから 4.0.14 未満のバージョンにダウングレードすると、最初の起動時に InnoDB から次の警告が出力されることに注意する。
InnoDB: Warning: an inconsistent page in the doublewrite buffer InnoDB: space id 2552202359 page number 8245, 127'th page in dblwr buf.
ただし、これは危険ではないので無視してかまわない。
バッファプール置換アルゴリズムが変更されて、LRU リストの最後の 10% に置換可能なページがない場合に、変更されたページがフラッシュされるようになった。これによって、プロセスが読み取りと書き込みを行う場合に、ディスク I/O を削減できる。
バッファプールのチェックポイントフラッシュアルゴリズムで、フラッシュリストの最後にあるページに隣接するページもフラッシュされるようになった。これによって、データベースのシャットダウンを高速化できると同時に、InnoDB のログファイルがバッファプールに比べてかなり小さい場合にディスクの書き込みを高速化できる。
4.0.13 では、SHOW INNODB STATUS で最新の UNIQUE KEY エラーに関する詳細情報が出力されていたが、この情報を格納すると REPLACE の速度が大きく低下する可能性があった。この情報が格納または出力されなくなった。
バグ修正: MySQL レプリケーションで、SET FOREIGN_KEY_CHECKS=0 が適切にレプリケートされていなかった。下位バージョンの 3.23 にはこの修正が移植されない。
バグ修正: パラメータ innodb_max_dirty_pages_pct で、バッファプール内の空きページが考慮されていなかった。このため、バッファプール内に多数の空きページがある場合でも、必要以上にフラッシュされることがあった。回避策: SET GLOBAL innodb_max_dirty_pages_pct = 100。
バグ修正: 大規模なインデックススキャンが行われると、セマフォ待ちが長くなるために、ファイル読み取り要求でリソースが不足し、InnoDB がアサートする可能性があった。
バグ修正: AUTOCOMMIT=1 の場合にバイナリロギングがオンになっていないと、MySQL が LOCK TABLES の内部で更新を行う SQL ステートメントの後にコミットを実行できなかった。また、SELECT ステートメントではバイナリロギングの状態に関係なくコミットが実行されなかった。
バグ修正: mysqld 起動後の最初の B ツリーページ分割で、InnoDB がインデックスページディレクトリを破壊する可能性があった。現象としては、page0page.c の page_dir_find_slot() 関数でアサートが発生していた。
バグ修正: UPDATE CASCADE 節を伴う FOREIGN KEY で、親カラムの内部ストレージ長が子カラムと異なっている場合にカスケードされた更新を実行すると、子テーブルでカラム長が不適切となり、子テーブルが破損していた。MySQL の '暗黙的なカラム仕様の変更' のために固定長の CHAR カラムが内部的に VARCHAR に変更され、このエラーを引き起こす可能性がある。
バグ修正: latin1 以外のキャラクタセットが使用された場合、および FOREIGN KEY で親カラムの内部ストレージ長が子カラムと違っている場合に、子テーブルへの挿入がすべて外部キーエラーで失敗していた。
バグ修正: InnoDB が、クラスタードインデックスレコードが見つからないというメッセージを返したり、ごくまれではあるが、ロールバック、パージ、および SELECT が同時に発生した場合に無関係なローを返したりすることがあった。
LOCK TABLES 内で SELECT が使用された場合に、btr0sea.c ラッチ上でハングが発生しないように修正された。
バグ修正: 4.0.13 のリリースノートの記載に反し、MySQL のバイナリロギングがオンであるとグループコミットが動作しなかった。
バグ修正: Unix で os_event_wait() が適切に機能していなかったために、各種ログ操作でリソースの枯渇が発生していた。
バグ修正: 単一の DELETE ステートメントがいくつかのローを削除した後に FOREIGN KEY エラーまたは 'Table is full error' で失敗した場合に、MySQL は SQL ステートメント全体をロールバックせず、失敗したステートメントをバイナリログに書き込み、その際にゼロ以外の error_code を報告していた。
バグ修正: テーブルには最大 1,000 個のカラムを収容できるが、InnoDB が CREATE TABLE でその制限をチェックしていなかったために、テーブルに対する後続の INSERT または SELECT でアサートが発生する可能性があった。
© 1995-2005 MySQL AB. All rights reserved.
