連載
» 2013年03月19日 16時20分 UPDATE

Database Watch(2013年3月版):信頼性とパフォーマンスを改善したMySQL 5.6をウォッチ! (1/2)

2013年2月にリリースされたMySQL 5.6。主要機能や採用事例などを「Oracle MySQL Tech Tour Tokyo」でウォッチしてきた。

[加山恵美,@IT]

インド版国民背番号制度でMySQLとHadoopが稼働

 2013年2月5日、オラクルはコミュニティ版のMySQL 5.6(GA)(リンク)を発表しました。今回は3月1日に開催された「Oracle MySQL Tech Tour Tokyo」で紹介されたMySQL 5.6 GAの技術アップデートなどをレポートします。

 MySQLはGoogleやFacebookなどのWebサイトだけでなく、エンタープライズシステムや組み込み系システムなどでも幅広く利用されています。各種Webサービスにおけるデータ量の増加は、皆さん御承知の通り、爆発的なものです。Twitterでは1日あたり4億ツイート、YouTubeでは毎分当たり72時間分の動画がアップロードされていると言われていますが、これらのサービスの裏側ではMySQLを採用したシステムが稼働しています。

 最近の大規模なMySQL採用事例としてはインド版の国民総背番号制度(Aadhaar)があります。2013年1月現在、約2億6000万IDが発行され、ID番号と生体認証情報を紐付けて管理しています。統計情報はHadoop、トランザクショナルな処理は商用版MySQLを採用しています。

 MySQL 5.6 GAの技術アップデートのセッションはMySQL Global Business Unit MySQL Senior Sales Consultant 山崎由章氏(写真)が登壇しました(休憩時間にちょっと恥ずかしそうにぬいぐるみと一緒に写ってくれました)。

mhdb_dbw1303_yamazaki.jpg MySQL Global Business Unit MySQL Senior Sales Consultant 山崎由章氏

MySQL 5.6:オプティマイザ改善でパフォーマンス向上

 MySQL 5.6では、パフォーマンスやスケーラビリティが一層強化されています。セッションでは実際のSysBenchでのベンチマーク比較が紹介されました。それによると、MySQL 5.6はMySQL 5.5と比較して最高で234%の性能向上が見られたとのことです。

mhdb_paform.jpg ベンチマーク結果 SysBenchを使ってMySQL 5.5と5.6を比較している(資料提供:日本オラクル)

オプティマイザの改善

 性能向上に寄与しているのがオプティマイザの改善です。ここはMySQL 5.6の改善項目の中でも力が入っているようで、幅広く改善が加えられています。SQL実効性能の向上および実行時間の短縮に関しては、サブクエリの最適化、ファイルソートの性能向上、各種JOIN性能の向上があります。

 例えばIndex Condition Pushdown(ICP)はストレージエンジン側でデータを絞り込めるようになるため、ICPが無効の状態に比べ、ICPを有効にするとオラクルの調べでは15秒から90ミリ秒へ短縮でき、実に160倍の高速化が実現しているということです。またバッチ・キー・アクセス(BKA)と複数範囲の読み取りではJOINバッファを大きくするほど高い効果が得られ、最大で実行時間が2800秒から10秒に短縮できたという結果が出たそうです。ディスクアクセスの多いJOINクエリのパフォーマンスが向上します。

 また、オプティマイザではより詳細な状況監視ができるようになります。EXPLAIN文はINSERTやUPDATEなど利用できる範囲が広がり、またJSONフォーマットで出力できるようになります。

デフォルトストレージエンジンInnoDB改善、NoSQLアクセスも

 それからバージョン5.5からデフォルトストレージエンジンになったInnoDBもトランザクションのスループットが向上するなどの改善が加えられました。性能向上に関しては、内部実装を改良することでレガシーなボトルネックを削減したり、スレッドの同時実行性能を向上させるなどが挙げられます。ほかにも参照処理の同時実行が多いWebアプリケーションで「参照専用トランザクション」を使うとオーバーヘッドを削減し、性能向上が見込めます。SSDの最適化も行われました。

 またInnoDBではオンラインでのDDL(Data Definition Language)実行が拡張されました。CREATE INDEX、DROP INDEX、RENAME COLUMNなど、データベースを止めることなくスキーマの変更をできるようになります。またMySQLサーバ間でテーブルの移動やコピーもできるようになりました。実はこれ、以前のデフォルトストレージエンジンだったMyISAMでできていたため、InnoDBでもできるようにしてほしいと要望が高かったそうです。

 以前からMySQL 5.6の新機能として注目されていたNoSQLアクセス。InnoDBストレージエンジンで実現しました。MySQLはRDBMSですが、Memcached Protocolを用いたNoSQLアクセスもできるようになるということです。

mhdb_dbw1303.jpg MySQL 5.6で使えるようになったNoSQL API(出典:日本オラクル)

 Memcached APIによるアクセスはRDBMSのSQLのアクセスに比べて最大で9倍のスループット向上が見られたとのことです。シンプルなアクセスならNoSQLアクセスを利用するとよさそうです。

レプリケーションでも性能向上

 この他にも、レプリケーションに関する改善があります。

 パフォーマンスに関してはマルチスレッドスレーブ、つまりスレーブのSQLスレッドを複数起動することが可能となります。この場合、マスターとスレーブではトランザクションの実行順序が異なる可能性があるそうですが、データベース内での整合性は保証されているそうです。

 また複数トランザクションの情報をまとめてバイナリログに記録することができるようになることで、180%のパフォーマンス向上が見られたそうです。また行ベースのレプリケーションでは新しいオプション(binlog-row-image=minimal)を利用することで、変更された行イメージだけを保持するため、スループットの向上が見込めます。

 また、データ複製における誤り発生箇所を正確に特定するのに役立つチェックサムを記録できるようにもなっています。データの整合性についての機能が加わることで堅牢性が強化されています。なお、内部テストにおいてはチェックサムを使用しても大きなオーバーヘッドは検出されてないそうです。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。