動かざることバグの如し

近づきたいよ 君の理想に

mysqlslapでMySQLサーバーの負荷テストをサクッと行う

環境

実はMariaDBにも同じコマンドが入っていたので仕様同じで使えるはず

やりたいこと

MySQLサーバーの負荷テストを「手軽」に行いたい

やれやれまたツールの選定作業か、、と思って探していたらどうも公式がツールを「mysqlslap」という名前で出しているらしい。てか入ってた。サンキューイルカ

公式ドキュメントいわく、

mysqlslap は MySQL サーバーのクライアント負荷をエミュレートし、各段階のタイミングをレポートする診断プログラムです。複数のクライアントがサーバーにアクセスしているかのように作動します。

とのこと。ポイントは「自動で負荷用のダミーDB、SQL」を生成してくれるところだと思う。

インストール

mysql-clientインストールしたら勝手に入ってると思う

実行

基本構文は以下

time mysqlslap \
--user=root \
--password=pass \
--engine=innodb \
--concurrency=10 \
--iterations=20 \
--auto-generate-sql \
--auto-generate-sql-load-type=mixed \
--number-char-cols=20 \
--number-int-cols=20 \
--auto-generate-sql-write-number=100000

各オプションの説明は以下

  • --user ユーザー名
  • --password パスワード 今回はローカル対象だが、別ホストを対象にテストをする場合は--hostが必要
  • --engine=innodb ストレージエンジン myisamとか
  • --concurrency 同時接続数 多くのユーザーからアクセスされていることを想定するならここの値を増やす
  • --iterations SQLの実行を何回行うか
  • --auto-generate-sql SQLを自動生成する
  • --auto-generate-sql-load-type=mixed INSERTとSELECT、UPDATEのコマンドをそれぞれ行う
  • --number-char-cols 1レコード内のVARCHAR型のカラム数
  • --number-int-cols 1レコード内のINT型のカラム数
  • --auto-generate-sql-write-number 最初にダミーデータを用意する際、レコードをどれだけ用意するか デフォルトだとかなり少ないので設定推奨

他にもオプションはいっぱいあるので公式ドキュメントをご覧くださいとしかいいようがない

実際に負荷テストする前にSQLを確認したい

オプションに --only-print をつけて実行するとSQLがバーっと術力される。

工夫すれば自前SQLでテストもできるらしいが、サクッとやるぶんにはauto-generate-sqlでも十分だと思った。