- 今日はMTGや研究所定例などおしゃべり業務を色々やってた
- その後はさくらのVPSを複数用意してグローバルの通信でtcprivがちゃんと動くか確認して動いたのでベンチマーク準備で色々調べていた
- sysbenchだとどうするかな〜などあれこれ
- そこで神yokuさんから認証プラグインのオーバーヘッドを計測するのにベストでシンプルな方法を教えていただいて、最高に感謝しました
-- 下準備
-- 1. パスワードを空っぽにすると認証機構がバイパスされたりするので1文字でもいいのでパスワードは入れる
-- 2. mysqlslapはデフォルトスキーマ `mysqlslap` にアクセスしようとして回避できないのでどこか指定する
mysql80 2998> CREATE USER yoku0825_native IDENTIFIED WITH mysql_native_password BY 'yoku0825';
Query OK, 0 rows affected (0.00 sec)
mysql80 2998> GRANT SELECT ON mysqlslap.* TO yoku0825_native;
Query OK, 0 rows affected (0.00 sec)
mysql80 2998> CREATE USER yoku0825_caching IDENTIFIED WITH caching_sha2_password BY 'yoku0825';
Query OK, 0 rows affected (0.01 sec)
mysql80 2998> GRANT SELECT ON mysqlslap.* TO yoku0825_caching;
Query OK, 0 rows affected (0.00 sec)
mysql80 2998> CREATE USER yoku0825_sha256 IDENTIFIED WITH sha256_password BY 'yoku0825';
Query OK, 0 rows affected (0.01 sec)
mysql80 2998> GRANT SELECT ON mysqlslap.* TO yoku0825_sha256;
Query OK, 0 rows affected (0.00 sec)
### 実行はシェルから
### --detatch=1 で1クエリーごとに接続/切断を発生させる
### --query="SELECT 1" は認証方法に関わらずO(1)な時間で結果を返す
$ mysqlslap --no-defaults -h127.0.0.1 -P64080 -uyoku0825_native --password=yoku0825 \
--number-of-queries=100 --iterations=5 \
--detach=1 --ssl-mode=DISABLE --query="SELECT 1"
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
Average number of seconds to run all queries: 1.153 seconds
Minimum number of seconds to run all queries: 1.049 seconds
Maximum number of seconds to run all queries: 1.315 seconds
Number of clients running queries: 1
Average number of queries per client: 100
$ mysqlslap --no-defaults -h127.0.0.1 -P64080 -uyoku0825_sha256 --password=yoku0825 --query="SELECT 1" --number-of-queries=100 --detach=1 --ssl-mode=DISABLE --iterations=5
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
Average number of seconds to run all queries: 1.415 seconds
Minimum number of seconds to run all queries: 1.396 seconds
Maximum number of seconds to run all queries: 1.453 seconds
Number of clients running queries: 1
Average number of queries per client: 100
mysqlの認証だけをベンチマークするシンプルなやつないかなぁ
— Ryosuke Matsumoto / まつもとりー (@matsumotory) 2020年8月26日
公式バイナリだけでやるならmysqlslapに "SELECT 1" だけを連打させるのが良さそうな気がします(同じアカウントで複数の認証方法を使い分けることはできないので、対象の認証プラグインごとにアカウントを作るかんじですhttps://t.co/wlDnC1ttY9
— yoku0825 (@yoku0825) 2020年8月26日
接続 -> 認証 -> SELECT 1 -> 切断 -> 接続 -> 認証 -> SELECT 1 -> 切断 -> ..
— yoku0825 (@yoku0825) 2020年8月26日
な感じになります! (--detatch=1がそれを指示しています!)
ちなみにこのベンチだと 認証 ( https://t.co/jyDE7Vgexo ) を1回、 認可 ( https://t.co/srVuM8Iq6K ) を1回ずつ通ります。実在するテーブルに対してクエリーを書けると認可の回数が増えますが、認可は認証プラグイン関係なく行われるのでベンチは要らないはずです!
— yoku0825 (@yoku0825) 2020年8月26日
これで、認証プラグインのオーバーヘッドに焦点を当てた評価ができそう
yokuさん神!!!!!!!