環境
- MySQL 5.6
実は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でも十分だと思った。