![]() |
![]() |
D.1.2.MySQL5.5.29 での変更点( 2012-12-21 )
機能の追加と変更
・ SHOW AUTHORS および SHOW CONTRIBUTORS ステートメントが現在MySQL5.5で非推奨であり、MySQL5.6で削除されている。
修正されたバグ
・ パフォーマンス : InnoDB : SSD などの高速ストレージデバイスによるパフォーマンスの向上に合わせ、下位レベルの InnoDB 読み取り操作のタイミング値が調整された。この改善は、主に、 圧縮 テーブルの BLOB カラムの読み取り操作に影響を与える(Bug#13702112、Bug#64258)。
・ 重要な変更 : InnoDB :IndexMergeアクセスメソッドを使用した DML ステートメントが、たとえ最終的な結果の一部でない行であっても、テーブルの多くの行をロックする可能性があった。この修正により、一致しない行のロックを解放することにより、過剰な ロック が解消される。この最適化が影響するのは、アイソレーションレベルが READ COMMITTED と同じか、またはそれ以下のトランザクションのみである。 REPEATABLE READ または SERIALIZABLE アイソレーションレベルを使用したトランザクションには適用されない(Bug#14226171)。
・ InnoDB : InnoDB テーブルに対するオンラインのDDL操作で、インデックスプリフィックスを使用したユニークインデックスに対して重複キーエラーをレポートするときに、正しいキー値ではなく、空の値( '' )を誤ってレポートしていた(Bug#14729221)。
・ InnoDB :この修正により、クエリが InnoDB テーブルにアクセスするときの KILL QUERY ステートメントに対するMySQLの応答性が向上する(Bug#14704286)。
・ InnoDB :ディスクフルエラーにより CREATE TABLE ステートメントがエラーになった場合、操作中に割り当てられた一部のメモリが適切に解放されなかった(Bug#14708715)。
・ InnoDB : innodb_file_per_table 設定が有効な場合に、保留中のI/O要求のタイミングに依存する競合状態により、 DROP TABLE 操作でクラッシュが発生する可能性があった(Bug#14594600、Bug#66718)。
・ InnoDB : 変更バッファ エントリがバッファプールページにマージされている間にサーバがクラッシュした場合、トランザクションログと変更バッファが一貫性のない状態で放置されていた。再起動後に、対応するセカンダリインデックスページを読み込むと、MySQLがクラッシュする可能性がある。この問題は、他の操作に対応するために本来の 挿入バッファリング メカニズムが一般化されたMySQL5.5またはそれ以降で発生する可能性が高かった(Bug#14636528、Bug#66819、Bug#58571、Bug#61104、Bug#65443)。
・ InnoDB : 圧縮 を使用した InnoDB テーブルにさまざまなレコード長のデータを挿入すると、エラーが発生してサーバが停止する可能性があった(Bug#14554000、Bug#13523839、Bug#63815、Bug#12845774、Bug#61456、Bug#12595091、Bug#61208)。
・ InnoDB :3072の上限値に非常に近い長さのインデックスキーでテーブルを定義した場合、このテーブルに対するクエリで重大なエラーが発生する可能性があった(Bug#14500557、Bug#66413)。
・ InnoDB :自動増分カラムで FLOAT または DOUBLE データタイプを使用した場合、自動増分値が非常に大きくなったときに( unsignedlonglong の最大値よりも大きくなったとき)、それ以降の挿入が失敗したり、サーバが停止したりする可能性があった(Bug#14145950、Bug#55071)。
・ InnoDB :一貫性のあるスナップショットでトランザクションが開始された後で、トランザクションの実行中に新しいインデックスがテーブルに追加された場合、それ以降の UPDATE ステートメントで間違ってエラーが検出される可能性があった。
HA_ERR_TABLE_DEF_CHANGED:insufficienthistoryforindex
この問題はデバッグビルドで表明エラーを起こす可能性があった(Bug#14036214)。
・ InnoDB :それぞれの値が768バイトよりも大きい複数のBLOB値が1行に含まれ、そのサイズが ページサイズ の半分を超えたことにより UPDATE が失敗した場合のエラーメッセージが改善された。以前のメッセージは、各BLOBカラムの768バイトのプリフィックスが制限エラーの原因であるにも関わらずBLOBの使用を示唆するもので、誤解を招く可能性があった。
ErrorCode1118:Rowsizetoolarge. Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is8126.
YouhavetochangesomecolumnstoTEXTorBLOBs
この問題の回避策は ROW_FORMAT=DYNAMIC 句または ROW_FORMAT=COMPRESSED 句でテーブルを作成することであったが、現在ではこれはメッセージに示唆されている(Bug#13453036、Bug#63507)。
・ InnoDB :まれな状況において、BLOBカラムを変更した操作の ROLLBACK 時に、MySQLが正しくない順序で InnoDB undo レコードを適用する可能性があった。この問題はデバッグビルドで表明エラーを起こす可能性があった。
!bpage->file_page_was_freed
(Bug#13249921)
・ レプリケーション : --replicate-ignore-table を使用した状態で、スレーブで値が設定されていないユーザ変数を書き込む更新を行うと、スレーブでエラーが発生する可能性があった(Bug#14597605)。
参考:このバグは、Bug#14275000で取り上げられた。
・ レプリケーション :バックティック( ` )文字が、内部で生成されたSQLステートメントで必ずしも正しく処理されず、場合によってはスレーブでエラーを招く可能性があった(Bug#14548159)。
・ レプリケーション :非トランザクショナルテーブルへの挿入がディスクの空き容量が不十分であるために失敗した結果、サーバがすべての保留中のイベントを適切にクリーンアップせず、表明エラーが発生したり、場合によってはその他のエラーが発生していた(Bug#11750014)。
・ クエリに非常に長いデータベース名があると、サーバが終了する可能性があった(Bug#15912213)。
・ ストアドプロシージャ内部で、非常に長いテーブルエイリアスを使用したマルチテーブル DELETE ステートメントを実行すると、サーバが終了する可能性があった(Bug#15954896)。
・ クエリに非常に長いテーブルエイリアスがあると、サーバが終了する可能性があった(Bug#15948123)。
・ NULL タイプ属性で InnoDB テーブルに auto-increment カラムを作成しようとすると、重大なエラーが発生する可能性があった(Bug#14758479)。
・ InnoDB テーブルに対する DELETE ステートメントで間違ったトランザクションのメタデータがレコードに書き込まれ、エラーが発生してサーバが停止する可能性があった。この問題を回避するには、プライマリキーの長さを1Kバイト未満に指定する(Bug#14731482)。
・ MAX() を使用したサブクエリを含むクエリを繰り返し実行すると、メモリ消費の増大を招く可能性があった(Bug#14683676)。
・ dbname に複数のバックティック( ` )文字が含まれる場合、Unknowndatabaseで USE dbname がエラーになる可能性があった(Bug#14645196)。
・ GNU configure オプションを CMake に対応するオプションに変換する configure.pl スクリプトで、--with-client-ldflagsおよび--with-mysqld-ldflagsオプションについて、間違った出力が生成されていた。現在、これらのオプションは無視されている(Bug#14593123)。
・ SHOW PROFILE を使用すると、サーバの過剰なメモリ消費を引き起こす可能性があった(Bug#14629232)。
・ スレッドキャッシュがFIFO形式でなくLIFO形式で動作するように実装されているため、スレッドがサービスを拒否される可能性があった(ただし、この可能性はほとんどなかった)(Bug#14621627)。
・ ストアドプログラム内部で、プログラムが終了するまで状態情報を保持するために割り当てられているメモリが解放されず、メモリが大量に使用されていた(Bug#14640599)。
・ メモリのクリーンアップが正しくないと、サーバが終了する可能性があった(Bug#14536113)。
・ --skip-name-resolve でサーバが起動された場合、 PROXY 権限の付与または取り消しにより、サーバが終了する可能性があった(Bug#14211140)。
・ CREATE USER および DROP USER が権限をフラッシュできず、 FLUSH PRIVILEGES を明示的に使用しなければならない可能性があった(Bug#13864642)。
・ ビューを通じて INFORMATION_SCHEMA テーブルにアクセスすると、メモリリークが発生する可能性があった(Bug#13734987)。
・ 外部カラムで GROUPBY を使用したサブクエリを含むクエリの場合、メモリリークが発生する可能性があった(Bug#13724099)。
・ Cmake2.6を使用したMicrosoftWindowsで、 create_initial_db ステップが失敗した場合、ビルドプロセスが停止していた(Bug#13713525)。
・ 実引数の解析が行われる前に、 mysqld_safe で --plugin_dir オプションが存在するかどうかがテストされ、デフォルト値が割り当てられていた(Bug#13548161)。
・ MyISAM テーブルに破損したキー( .MYI )ファイルがあった場合、 CHECK TABLE および REPAIR TABLE がクラッシュする可能性があった。現在は、サーバでエラーが生成される(Bug#13556441)。
・ メモリのクリーンアップが正しくないと、サーバが終了する可能性があった(Bug#13340270)。
・ QUICK_INDEX_MERGE_SELECT/Unique 後にクリーンアップできないことにより、メモリリークが発生していた(Bug#12694872、Bug#14542543)。
・ サーバでカウントされる所定のホストからの接続エラーの数が定期的にリセットされ、その結果 max_connect_errors に達することはなく、無効なホストからの接続がブロックされなかった(Bug#11753779)。
参考:Bug#38247、Bug#43006、Bug#45584、Bug#45606も参照。
・myisamchk コマンドのエラーメッセージである“buffer too small”は、 sort_buffer_sizeの設定値を参照しなければならなかったが、 myisam_sort_buffer_size の設定値を参照している (Bug #11754894, Bug #46578)。・ 最適化時に、 ZEROFILL 値が文字列定数に変換される。しかし、 CASE 式で計画後にデータタイプの切り換えを処理できず、引数でなくnullポインタが CASE で検出されていた(Bug#57135、Bug#11764313)。
・ デバッグビルドで、オープンな範囲の禁止について InnoDB 表明が過剰だった(Bug#66513、Bug#14547952)。
・ Windowsにおいて、Perlバージョンの mysql_install_db により、正しく設定されていないシステムテーブルが mysql データベースに作成されていた(Bug#65584、Bug#14181049)。
・ mysqld_safe が UMASK 環境変数の値を無視したため、作成されたファイルのアクセスモードについて、 mysqld と異なる動作になっていた。現在、 mysqld_safe (および mysqld_multi )は mysqld とほぼ同じ動作になるよう試行している(Bug#57406、Bug#11764559)。
・ expr 値が符号付きの BIGINT の最大値よりも大きい場合に LAST_INSERT_ID( expr ) が機能しなかった(Bug#20964、Bug#11745891)。