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
でアサートが発生する可能性があった。
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.