2011年7月30日土曜日

MySQL5.5のベンチマークテスト その2

こんにちは、matsuiです。

前回に引き続き、MySQL5.5のベンチマークについて、mysqlslapを使って得られた結果から5.5の特徴を見ていきたいと思います。
進め方は前回と同様、MySQL5.1とMySQL5.5のベンチマークのスコアを対比させる形です。

条件5
$ mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary -e innodb --number-int-cols=3 --number-char-cols=5 --concurrency=1000 --auto-generate-sql-write-number=300 --auto-generate-sql-execute-number=300 --auto-generate-sql-load-type=mixed --create-schema=test -h localhost -u root -p

MySQL5.1
Average number of seconds to run all queries: 646.631 seconds
Minimum number of seconds to run all queries: 646.631 seconds
Maximum number of seconds to run all queries: 646.631 seconds
Number of clients running queries: 1000
Average number of queries per client: 300

MySQL5.5
Average number of seconds to run all queries: 601.654 seconds
Minimum number of seconds to run all queries: 601.654 seconds
Maximum number of seconds to run all queries: 601.654 seconds
Number of clients running queries: 1000
Average number of queries per client: 300

前回の条件4の結果からクライアントの数よりもクエリ数の方が実行時間に大きな影響を与えると推測し、クライアント数はそのままにクエリ数を条件4の30から10倍し、300で実行してみました。
5.1は8倍、5.5は100倍かかったということで、どちらも急激に実行時間が長くなっています。
性能劣化の比率だけで言うのであれば、5.5の方が性能劣化が激しいですが、そもそも条件4の結果自体が5.1と5.5で13倍近く違いますので、この結果だけでは5.5になって性能が劣化したとは言えません。


条件6
$ mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary -e innodb --number-int-cols=10 --number-char-cols=10 --concurrency=1000 --auto-generate-sql-write-number=10 --auto-generate-sql-execute-number=30 --auto-generate-sql-load-type=mixed --create-schema=test -h localhost -u root -p

MySQL5.1
Average number of seconds to run all queries: 20.053 seconds
Minimum number of seconds to run all queries: 20.053 seconds
Maximum number of seconds to run all queries: 20.053 seconds
Number of clients running queries: 1000
Average number of queries per client: 30

MySQL5.5
Average number of seconds to run all queries: 12.499 seconds
Minimum number of seconds to run all queries: 12.499 seconds
Maximum number of seconds to run all queries: 12.499 seconds
Number of clients running queries: 1000
Average number of queries per client: 30

条件6では少々検証方向性を変更し、クライアント数とクエリ数は条件4と同じのまま、カラム数と事前に存在するデータの量を変更しています。
カラム数はintとcharを合わせて5倍近くになっていますが、事前に用意されるデータは1/10です(もともと大した量ではないので、実行前の予測としては結果にを与えるほどの減少量ではないと予測しました)。
結果を見ると、条件4よりも処理時間が短くなりました。
カラム自体は増えているはずですので、事前に存在するデータの量が、実行時間に大きな影響を与えたのでしょうか。
ちなみに--auto-generate-sql-load-typeをmixedに指定していますので(mixedはpkによるselectとinsert)、実行時間の変化はSELECT文の発行によるものなのかもしれません。


条件7
$ mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary -e innodb --number-int-cols=10 --number-char-cols=10 --concurrency=500 --auto-generate-sql-write-number=10 --auto-generate-sql-execute-number=30 --auto-generate-sql-load-type=mixed --create-schema=test -h localhost -u root -p

MySQL5.1
Average number of seconds to run all queries: 5.148 seconds
Minimum number of seconds to run all queries: 5.148 seconds
Maximum number of seconds to run all queries: 5.148 seconds
Number of clients running queries: 500
Average number of queries per client: 30

MySQL5.5
Average number of seconds to run all queries: 3.661 seconds
Minimum number of seconds to run all queries: 3.661 seconds
Maximum number of seconds to run all queries: 3.661 seconds
Number of clients running queries: 500
Average number of queries per client: 30

条件6からクライアントを半減させました。
条件3からみた場合クライアント数は同じで、クエリ数は条件3の1/3です。
条件4からみた場合は、クライアント数が半分で、クエリ数は同一です。
カラム数と事前のデータについてもは条件6と同様です。
5.5についてはクライアント数が1000程度の場合、処理時間はクライアント数に比例しています。
やはり5.1と5.5では、大幅な処理時間の劣化が始まるポイントが改善され、より安定して高いパフォーマンスが出るように調整されているように思えます。


最終結果
2回に分けてMySQLの5.1と5.5を比較してきましたが、なんとなく特徴が見えてきたのではないでしょうか(検証しきれなかった問題もありますが…)。
今回の検証で特におもしろい結果となったのは、条件4のようなケース(多数のクライアントで少量のSQL実行)において、5.1よりも並列処理性能が大幅に増したという点です。
ソーシャルゲームのように多数のクライアントが比較的少数のSQLを実行するというケースにおいて、特に重要な改善と言えます。
また、サーバの管理コストの面からみると、サーバプログラムの性能向上はそのままサーバの管理コスト減につながります。

全てのケースにおいて、5.5のパフォーマンス向上は素晴らしいものがあり、特に(処理限界は実行環境のスペックに左右されますが)「並列処理性能向上」と「パフォーマンス劣化開始地点の引き上げ」はMySQLに関わる方全てに非常にうれしい点といえるのではないでしょうか。
MySQK5.1から設定周りで変更点も少なくないですが、弊社で運用している限りMySQL5.5を使ったために発生したトラブルはありません。
5.1から5.5へ移行できる環境であるならば、ぜひ5.5への切り替えを検討されてはいかがでしょうか。

0 件のコメント:

コメントを投稿