MySQL SSL接続時のパフォーマンスを計測してみた

Ubuntu 10.10のMySQLとSSL通信でJDBC接続する」でMySQLSSL通信を試してみたので、次にSSL通信時にパフォーマンスがどれほど落ちるのか調査してみました。
ドキュメントには30%から50%パフォーマンスが落ちるとかかれています。

計測環境

計測ツールは標準のmysqlslapを使用。

マシンは、MySQLがインストールされているホストとmysqlslapを実行するホストの2台を用意しました。
ちなみにサーバーはどちらもNIFTYクラウドのSmall1。

計測したMySQLのバージョンは5.0.77、設定はCentOS 5.3にyumでインストールしたデフォルトのままです。

リモートからの接続の許可と接続確認

テストなので全ホストからアクセス可能に設定。
http://rfs.jp/server/mysql/02/02.html

mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;

mysqlクライアントで接続確認
cacert.pem、client-cert.pem、client-key.pemをクライアントホストにコピーしておく

$ mysql -h <host_name> -uroot -p --ssl-ca=cacert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem

mysqlslapもSSL接続オプションは同様のものを指定します。

http://dev.mysql.com/doc/refman/5.1/ja/secure-using-ssl.html

計測

公式ドキュメントのmysqlslapの説明:
http://dev.mysql.com/doc/refman/5.1-olh/ja/mysqlslap.html

書き込みはIO待ちが影響しそうなので読み込みのみで計測。

SSLあり

$ mysqlslap -h 10.100.xxx.yyy -uroot -p --ssl-ca=cacert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem --concurrency=10 --iterations=10 --number-of-queries=10000 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql  --auto-generate-sql-load-type=read
Enter password: 
Benchmark
	Average number of seconds to run all queries: 4.136 seconds
	Minimum number of seconds to run all queries: 4.057 seconds
	Maximum number of seconds to run all queries: 4.341 seconds
	Number of clients running queries: 10
	Average number of queries per client: 1000

read only SSLなし

$ mysqlslap -h 10.100.xxx.yyy -uroot -p --concurrency=10 --iterations=10 --number-of-queries=10000 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql  --auto-generate-sql-load-type=readEnter password: 
Benchmark
	Average number of seconds to run all queries: 4.174 seconds
	Minimum number of seconds to run all queries: 3.982 seconds
	Maximum number of seconds to run all queries: 4.404 seconds
	Number of clients running queries: 10
	Average number of queries per client: 1000

ほぼ、影響なし。ローカル同士で計った場合もほぼ同じだったのでSSL接続にしてもほとんどオーバーヘッドが無いってことでしょうか。

mysqlslapの動作についてもう少し調べて見ないとこの結果が妥当かは判断つかないな。