MySQL 5.6と5.5はどっちが早いのか?

         

先日、ついにMySQL 5.6.10GAがリリースされました。

機能的なところでは、オンライン(更新可能な状態)でAlter tableがサポートされたり、ブロックサイズがデフォルト16KBだったところ、4KB, 8KBに変更できるようになったなど、使ってみたいものも増えてきた感じです。

新機能概要についてはやはりnippondanjiさんの記事が非常に参考になります。
MySQL 5.6正式リリース!! #mysql56

とはいえ気になるのはやはりInnoDBの性能ということろで、早速5.5との比較をしてみました。

使用したのはお馴染みtpcc-mysqlです。
tpcc-mysqlについての詳しい説明はsh2先生の記事をご参照ください。
2009-02-12 tpcc-mysqlによるMySQLのベンチマーク

サーバリソースはこれまたsh2先生のdstatグラフ化ツールを使わせていただいています。
いつもありがとうございます。
2012-05-07 dstat2graphs - dstatのログをグラフ化するツール

検証した環境はこんな感じです。

Server

  • CPU Intel Core i5 2.80 × 2 HT
  • Memory 8.0GB
  • Disk Micron RealSSD C400 128GB (XFS format)

Software

  • OS CentOS 6.3 2.6.32-279.el6.x86_64
  • MySQL 5.5.30 / 5.6.10

クライアントがネックになっていないことは確認しています。

あとネットワークはクロスケーブルで直結してます。
家のルータだと心もとないので。

Configuration

主要なパラメータは以下のようにしています。

query_cache_size = 0
query_cache_type = 0
transaction_isolation = READ-COMMITTED
sync_binlog=1
innodb_buffer_pool_size = 5600MB
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_log_file_size = 256M
innodb_log_files_in_group = 2
innodb_flush_method=O_DIRECT

OSのIOスケジューラはdeadline

■検証概要

tpcc-mysqlにて300WHのデータに負荷をかける
コネクション数は2, 4, 8, 16, 32, 64, 128
測定時間は300秒です。
ランプアップは2接続の前に32接続で300秒流してます。

上記のテストを1セットとして、3セットを実施し、グラフは中間の値を採用しています。

さて結果はいかに

■結果

5.6の方が全体的にスコアが良い結果になりました。
1割から2割くらいスコアがよく、最大性能が上がっているように見えます。
接続数2では何回やっても5.5の方がスコアが良かったのでそんなものなのでしょう。

リソースを確認したところ、5.6の方がややCPUが回ってる感じがします。

MySQL 5.5 CPU utilization

MySQL 5.6 CPU utilization

InnoDBのmutexまわりの改善により、効率化された結果なのでしょうか。

気になるところとしまして、同じパラメータファイルを使っているのですがメモリの使い方がちょっと違う。
デフォルト値が変わったりしているものも多数あるようなので、その辺りで違ってきていて、スコアにも影響しているのかもしれないです。

MySQL 5.5 Memory utilization

MySQL 5.6 Memory utilization

この結果を踏まえて

接続数が少ない場合はMySQL5.5の方が早い!
MySQL5.6にすると2割くらい早くなる!

ということが言えます!

なわけでは無いのでくれぐれも注意してください。

ベンチマークを行うマシンスペック、使用データ、SQLなどが違うと結果などすぐ変わってしまうと思います。

結局のところは、実戦投入もしくは実践と同じ環境とアプリでのテストをしてみないと、バージョンを上げたところで性能が上がるかは最後までわからないはず。

この結果は、「大体こんなもん」というくらいの感覚でお願いします。

次はブロックサイズ変えてみて測定した結果を載せます。

One comment to this article

コメントを残す