ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2010-04-19

MySQLコミュニティ騒然!MySQL 5.5.4が与えるインパクト。

先週、MySQL Conference & Expo 2010が開催され、盛況のうちに終了した。カンファレンスに合わせる形で、MySQL 5.5.3および5.5.4がリリースされたのだが、これが目を見張るような進化を遂げている。特に性能面での進化には目を見張るものがある!Jeremy ZawodnyやMark Calleghanといったコミュニティの重鎮たちも「非常にエキサイティングなリリースだ!」などと表して歓迎の意を表している

というわけで、本日はMySQL 5.5.3/5.5.4の新機能および変更点についてレビューしてみよう!

おさらい。 〜 MySQL 5.5の既存の機能 〜

MySQL 5.5が登場したとき、その新機能については以前にもエントリで紹介したが、ここで改めておさらいしてみよう。MySQL 5.5は、正確にいうと現在最新バージョンであるMySQL 5.1の「次の次」のバージョンである。(5.2と5.3はスキップされた。)MySQL 5.4はマイルストーンリリースという位置づけのまま正式版にはならなかったので中間的なバージョンとなる。次の正式版が5.5.xなのか5.6なのかは現時点では未定だが、楽しみにしておいて頂きたい。

というわけで、MySQl 5.5.3にはMySQL 5.4で追加された機能、MySQL 5.5でこれまでに追加された機能が全て含まれている。MySQL 5.4およびMySQL 5.5で追加された機能はそれぞれ次の通りだ。

MySQL 5.4の新機能
  • InnoDBの性能改善(I/O、CPUスケーラビリティなど。この改善はInnoDB Pluginに引き継がれている。)
  • DTrace Probeの追加
  • 設定値のデフォルト値を変更(より多くのリソースを使うように)
  • INFORMATION_SCHEMAの拡張
  • SHOW ENGINE INNODB STATUSの拡張(さらなる情報の表示)

MySQL 5.5の新機能
  • Semi-Synchronous Replication(日本語では準同期レプリケーションとでも言うかな?)
  • InnoDB Plugin 1.0.5がビルトインのInnoDBと置き換えられた。
  • ストアドプロシージャにおけるSIGNAL/RESIGNAL機能。
  • XML機能の拡充(LOAD XML文など)
  • パーティショニングの種類が追加(RANGE COLUMNS/LIST COLUMNS/INT以外の型のサポート)
  • ALTER TABLE ... TRUNCATE PARTITION文の追加
  • パーティショニングされたMyISAMテーブルに対するCACHE INDEXのサポート
  • TO_SECONDS()関数

追加された機能の詳細については、次のページを参照のこと。
なお、以前紹介したRANGE COLUMNおよびLIST COLUMNSパーティショニングのマニュアルページが変更されているので、注意して頂きたい。(ページが分割された模様。)
なお、RANGE COLUMNSとLIST COLUMNSの使い方については、sh2氏の日記で以前紹介されているので、そちらを参照のこと。(このブログでも近々取り上げたいと思う。)

MySQL 5.5.3のインパクト

上記の機能拡張だけでもかなりお腹いっぱいだと思うのだが、MySQLの開発ペースはまだまだこんなものではない。MySQL 5.5.3では、さらに性能面、機能面での改良を行うための新機能が加えられている。はっきり言って凄い変化である。MySQL 5.1の新機能も魅力的なものばかりであったが、今回の変更点は遙かに上回る規模になっている。(といっても安定性を犠牲にしているわけではないからご安心を。)

MySQL 5.5.3における変更点はこのページで説明されているのだが、リストはとてもとても長い。全てに目を通して頂くのは面倒だと思われるので、ここでは主な変更点について紹介しようと思う。なお、MySQL 5.5.4とMySQL 5.5.3の違う点は、搭載されているInnoDB Pluginのバージョンである。MySQL 5.5.3にはInnoDB Plugin 1.0.5が、InnoDB Plugin 1.1が搭載されている。ここでは、InnoDB Plugin 1.1の新機能についても合わせて説明する。

InnoDBのさらなる性能向上

恐らく性能の向上は誰もが歓迎することのひとつであろう。MySQL 5.5.4(InnoDB Plugin 1.1)では、飛躍的な性能向上が図られている。Percona XtraDBやPBXTなど、強力なライバルが居るためMySQL/InnoDB開発陣もかなり奮闘しているのである。

InnoDB Plugin 1.1における性能強化については、MySQLのシニア・ソフトウェア・アーキテクトであるMikael Ronstrom氏のブログエントリで説明されているのだが、要点は以下の通り。
  • バッファプールインスタンスの分割
  • ロールバックセグメントの排他ロックを128に分割
  • フラッシュリストの分割
  • バッファプールの排他ロックとログの排他ロックをさらに独立したものに
  • パージ処理とマスタースレッドから別スレッドとして分離
詳細は一見すると地味かも知れないが、MySQLハッカーにとっては「ゴクリ!!」生唾ものである。ロック競合の低減はスケーラビリティ改善の基本である。これらの改善により、MySQL/InnoDBはCPU 32コアまで綺麗にスケールするようになるのだ!!

InnoDBクラッシュリカバリ時間が30倍高速に!

InnoDB Plugin 1.1には、さらに嬉しい性能改善がある。なんと、クラッシュリカバリ時間が劇的に高速化するのだ!!実験の結果、その効果は30倍以上だそうだ。詳細は次のページ(InnoDB開発者のブログエントリ)を参照のこと。
以下、測定値の抜粋。上がAFTER、下がBEFOREなので注意。
Plugin 1.0.7 (also Plugin 1.1): 1m52s scan, 12m04s apply, total 13m56s
Plugin 1.0.6: 31m39s scan, 7h06m21s apply, total 7h38m
7時間掛かっていたリカバリが、なんと13分に!!これは劇的ビフォー・アフターである。InnoDB開発者は、「この変更点があるからログはInnoDBの制限である4GBまで目一杯使っていいよ!」と述べている。正式版リリースが待ち遠しい。ちなみに、同様の変更点はInnoDB Plugin 1.0.7でも加えられている。こちらは、MySQL 5.1.46にも搭載予定である。

レプリケーションの機能拡充!

もう一つの目玉はレプリケーション機能の拡充である。こちらは、レプリケーションの開発チームを率いるLars Thalmann氏のブログエントリで述べられている。以下、要点の抜粋である。

  • Semi-sync replication plugin: MySQL 5.5で搭載されたもの。詳細についてはこのエントリを参照。
  • Slave fsync tunning: リレーログのfsyncをチューニング
  • Relay log corruption recovery: リレーログが壊れてしまったとき、マスターから自動的に修復を試みる。
  • Replication Heartbeat: ハートビート=定期的にマスターの応答を確認
  • Show Relay Logs: リレーログを一覧表示するコマンドの追加。
  • Per master server event filtering: マスターごとにイベントをフィルタ
  • Slave Type Conversions: テーブル定義が異なるマスターとスレーブで自動的に型変換
  • Individual Log Flushing: ログを個別にFLASH。後述。
  • Writing Non-Transactional events Directly To The Binary Log: MyISAMへの変更はトランザクションバッファを経ず、バイナリログへダイレクトに記述するように。

4バイトUTF-8対応!

おそらくこれは日本人開発者にとって非常に嬉しい機能のひとつであろう。4バイトUTF-8対応。長い時間が掛かったが、ようやく、ようやくの登場である。

MySQL 5.1以前のバージョンでは、BMP(基本多言語面)の文字しかサポートしていなかった。つまり、UTF-8は3バイトまでの文字しかサポートしていなかったのである。MySQL 5.5.3では、追加多言語面(UTF-16ではサロゲートペアを使う必要があるもの)もサポートされるようになった。人名漢字もバッチリである。

4バイトUTF-8を利用するには、utf8mb4という文字コードを指定する必要がある。utf8文字コード自体は、これまでと同じく3バイトのままであるので注意が必要である。(このような仕様になったのは、互換性を損なうことがないようにするためである。ご理解頂きたい。)

FLUSH LOGSの拡張

これまで、FLUSH LOGSはログを全て一括でフラッシュするようになっていたが、MySQL 5.5.3では各種ログを個別にフラッシュできるようになっている。
mysql> FLUSH BINARY LOGS; # バイナリログ
mysql> FLUSH ENGINE LOGS; # ストレージエンジンのログ(InnoDBの強制チェックポイント)
mysql> FLUSH ERROR LOGS; # エラーログ
mysql> FLUSH GENERAL LOGS; # 一般クエリログ
mysql> FLUSH RELAY LOGS; # リレーログ
mysql> FLUSH SLOW LOGS; # スロークエリログ

mysqldumpの拡張

mysqldumpコマンドに次のような、気の利いたオプションが追加されている。
  • --dump-slave: スレーブからダンプをとった場合、スレーブが参照しているマスターの情報をCHANGE MASTERとしてダンプに含める。
  • --apply-slave-statements: STOP SLAVEおよびSTART SLAVEコマンドを、CHANGE MASTERの前後に追加する。
  • --include-master-host-port: CHANGE MASTERコマンドにマスターのホスト名とポートを含める。
スレーブをセットアップする際の一手間が減ることだろう。

オプションの廃止と変更

MySQL 5.5.3では、元々廃止予定であった各種オプション(およびSQL構文など)が廃止されている。この点については、既にMyNAの坂井氏がエントリで整理してくれているのでそちらを参照して頂きたい。特に--default-character-setなどは要注意である。(サーバー側の文字コード指定は--character-set-server、クライアント側はこれまで通り--default-character-setなのでややこしや〜)

まとめ

このように、最新の開発バージョンである5.5.4において、MySQLはさらに飛躍的な進化を遂げている。MySQL 5.5.4は、現時点では品質的にはRC(リリース候補版)の扱いであり、このバージョンに含まれている機能は既にある程度テストされている。なので、ニーズに合致するなら本番投入も考慮に入れて頂いて結構だ。新しいものが好きな皆さんは是非試して頂きたいし、もう少し保守的な方は正式版がリリースされるのを楽しみにして頂きたい。オラクルは、サン・マイクロシステムズを買収する際にMySQLへのさらなる投資を誓った。今回のリリースはその看板通りである。これからも、MySQLの進化からますます目が離せない!!

なお、MySQL Conference & Expo 2010のスライドが既に公開されている。非常に役立つものが多いので、是非ダウンロードして頂きたい。

追記:
MySQL 5.5.3で追加された新機能、PERFORMANCE_SCHEMAのことを書くのをすっかり忘れていた。後日解説エントリを書くので乞うご期待!

0 コメント:

コメントを投稿