2018年11月12日月曜日

mysql_native_password, caching_sha2_password の速度測り比べ

TL;DR


  • まずは mysql_native_password, caching_sha2_password, sha256_password それぞれを指定したアカウントを作ります。
CREATE USER yoku0825_native_password IDENTIFIED WITH mysql_native_password BY 'a';
CREATE USER yoku0825_caching_sha2 IDENTIFIED WITH caching_sha2_password BY 'a';
CREATE USER yoku0825_sha256 IDENTIFIED WITH sha256_password BY 'a';
  • 別のマシンから1000回接続してquitするのにかかった時間の平均値を出します。それを5回繰り返して最大値と最小値を捨て、残った3回分の平均を取ります。
$ for n in $(seq 1 5) ; do time for m in $(seq 1 1000) ; do  MYSQL_PWD="a" mysql -h 172.31.32.165 -uyoku0825_native_password -e "quit"; done ; done
接続オプション mysql_native_password caching_sha2_password sha256
非SSL 7.8ms 7.5ms x
SSL 34.8ms 35.0ms 38.1ms
非SSL + サーバーの公開鍵 7.6ms 7.4ms 11.2ms
値はそこまでアテにしないとして、傾向としては
  • mysql_native_passwordcaching_sha2_password はそこまで大きな違いはない(個人によって感想は異なります)
  • やはり暗号化しないと速い
  • 非SSLで sha256_password を使うとかなりオーバーヘッドが見える
リモートから公開鍵を指定する MYSQL_SERVER_PUBLIC_KEY は少なくともMySQL 8.0のConnector/Cには mysql_options に実装されてるけど、それ以外のコネクターでは使えるのかどうかわからない。
と考えると、平文の速さが欲しければ mysql_native_password が安牌、SSLに切り替えるよって場合は caching_sha2_password でいいやってことになるかしらん。
【2018/11/14 15:22】
ご指摘をいただいたので追試。 @methane = サンありがとうございます。




mysqld はグリーティングの時に default_authentication_plugin のつもりでソルトを送り、そのプラグインを使っていないユーザーを指定された場合はそのプラグイン用のソルトを送りなおす = AuthSwitchRequest の1往復分
以下、全てSSLの場合。
caching_sha2 & default: caching_sha2 -> 34.6646666666667
caching_sha2 & default: native -> 35.148
native & default: caching_sha2 ->35.1036666666667
native & default: native -> 35.0216666666667

0 件のコメント :

コメントを投稿