ベンチマーク対決! MySQL 4.1.15 vs 5.0.15 どっちが速い?
「MySQL 新バージョン 5.0.15 (5.0.x系正式版)がリリース!」で予告しましたが、ver 4.1 系から大幅に進化した MySQL 5.0系ですが、そのパフォーマンスが非常に気になるところ。早速、mysqlbench を使ってベンチマークしてみました。
結果は MySQL 4.1 系の勝利。それでは、ベンチマーク結果をどうぞ。
ベンチマークツール mysqlbench の準備
まず始めに、MySQL 用のベンチマークツールである mysqlbench をインストールします。mysqlbench 自体は PostGuserQL 用に開発された pgbenchを MySQL 用に移植したツールで、TPC(Transaction Processing Performance Council) が規定している性能ベンチマークの指標のうち、TRC-B に準じたベンチマークとなっています。 TRC-B は現在は現実モデルにそぐわない単純な更新系トランザクションを想定しているため、現在は使われていないモデルなのですが、趣味でベンチマークする程度なら十分でしょう。ちなみに、結果の単位は一秒当たりのトランザクションの処理件数(tps)で表されます。 インストール方法
- MySQL が --enable-thread-safe-client オプションでインストールされている必要があります。mysqlbench が libmysqlclient_r.so が無いってエラーで make できない場合はココを疑って下さい。
- configure が付属していないので、自前で Makefile を修正する必要があります。具体的には、
LDFLAGS = MYSQL_INCLUDE= -I/usr/local/mysql/include/mysql ← 自分の環境にあわせる MYSQL_LFLAGS= -L/usr/local/mysql/lib/mysql ← 自分の環境にあわせるのように修正した Makefile を作成し、make install を実行すれば、mysqlbench ってファイルができあがります。
サーバ環境 (/proc/cpuinfo)
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 5
model name : AMD Opteron(tm) Processor 244
stepping : 8
cpu MHz : 1794.355
cache size : 1024 KB
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext lm 3dnowext 3dnow
bogomips : 3578.26
TLB size : 1088 4K pages
clflush size : 64
addusers sizes : 40 bits physical, 48 bits virtual
power management: ts ttp
MySQL 4.0.15 vs MySQL 5.0.15
それぞれのデータベースの設定値 my.cnf はデフォルトのままで計測。 4.1.15 MyISAM 性能評価mysqlbench -i -U user -P user123 -E myisam testdb
mysqlbench -U user -P user123 testdb -c 10 -t 100 testdb
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 1825.977080
tps ( exclude connections establishing) : 1906.3632505.0.15 MyISAM 性能評価
mysqlbench -i -U user -P user123 -E myisam testdb
mysqlbench -U user -P user123 testdb -c 10 -t 100 testdb
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 1605.193121
tps ( exclude connections establishing) : 1748.416809MySQL のデフォルトのテーブル型の MyISAM であれば、 ver 5.0系は約1割の性能ダウンと言ったところ。機能拡張を考えれば1割の性能ダウンは許容範囲内と言える。
4.1.15 InnoDB 性能評価
mysqlbench -i -U user -P user123 -E innodb testdb
mysqlbench -U user -P user123 testdb -c 10 -t 100 testdb
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 160.272694
tps ( exclude connections establishing) : 160.8633345.0.15 InnoDB 性能評価
mysqlbench -i -U user -P user123 -E innodb testdb
mysqlbench -U user -P user123 testdb -c 10 -t 100 testdb
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 18.861691
tps ( exclude connections establishing) : 18.880483トランザクション機能を実装したテーブル型の InnoDB であれば、 ver 5.0系は正直使い物にならない程に性能ダウンする。約1割程度の性能しか出ない結果となった。MyISAM と比較すると、1%の性能しかない結果となり今後のバージョンアップで改善されていくことに期待と言った感じ。
まぁいずれにしても、MySQL を選ぶ時点で多くの場合は、MyISAM を選択することを考えると、ver 5.0系もありかなぁ〜と思ったりしましたが、個人的には ver 5.1系になるまで見送ろうと思う次第です。
update 05.10.29
※どうやら、4.1 と 5.0 ではパラメータの初期値が異なるようで、それが原因で InnoDB のパフォーマンスに差が出ているようです。また改めて結果を修正したいと思います。
コメントやシェアをお願いします!
drk
ネコニャンニャンニャンさん>mysqlbench をそのまま使っているので、同じテーブル構造で同じリクエストが飛んでいるはずです。単に作り込みが甘いのかなぁ〜という印象です。
MyISAM の方を優先してチューニング進めていたのかなぁ〜と思ったり。原文を良く読んでいないので、ひょっとするの何か書いてあるのかも。
ネコニャンニャンニャン
興味深い結果ですね。
ちょっと疑問なのですが、
InnoDB のベンチ結果ら相当な開きがありますが、
実際のテーブル構造は間違いなく同じなのでしょうか?
ここまで違うと、機能追加の弊害と単純に結論付けし辛いものでして。