mysqlslapを使って負荷検証を行う

Published: 2016年2月15日 by tomsato

◼︎ 概要

mysqlslapはその名の通りMySQL関連のツールで直訳すると「mysqlを平手打ちする」 (※ 筆者は英語ができないので適当)

MySQL5.6の公式ドキュメントは以下
https://dev.mysql.com/doc/refman/5.6/ja/mysqlslap.html

複数のクライアントがサーバにアクセスしているかのように負荷をエミュレートすることができる

そんなmysqlslapについて便利なのでまとめていきます

◼︎ メリット

  • 導入が用意で実行方法も簡単
  • 並列数や何回実行するか、SQLの自動生成するなどオプションが豊富
  • 実行すると平均、最大、最小の値を知ることができる
  • 実行直後にサーバの負荷を確認するとどのぐらいまでそのサーバで処理を許容できるのかがわかる

◼︎ 導入方法

mysqlを入れていれば標準で入っている
リモートサーバから実行するなどの場合は以下のコマンドでインストールできる

$ sudo yum install -y mysql-bench

◼︎ 使用方法

負荷検証前に現状どんな状態なのかを確認する
既に動いているデータベースに対して検証する際にこの値を元に実行するといい

$ mysqladmin -u root -p extended-status | egrep '(Max|Threads_)'
| Max_used_connections                     | 183           |
| Threads_cached                           | 4             |
| Threads_connected                        | 141           |
| Threads_created                          | 4691          |
| Threads_running                          | 1             |
Max_used_connections これまでに記録された同時接続数の最大値
Threads_connected 現在開いている接続の数
Threads_created 接続を処理するために生成されたスレッド数
Threads_running スリープ状態になっていないスレッド数

とりあえず実行してみる

$ mysqlslap -u root -p --auto-generate-sql --concurrency=10
Benchmark
    Average number of seconds to run all queries: 0.118 seconds
    Minimum number of seconds to run all queries: 0.118 seconds
    Maximum number of seconds to run all queries: 0.118 seconds
    Number of clients running queries: 10
    Average number of queries per client: 0

よく使うオプションについて

–engine テーブルの作成に使用するエンジン
–auto-generate-sql SQLを自動で作成する
–csv カンマ区切りの形式で出力する
–auto-generate-sql-load-type クエリのタイム(select:read, insert:write, update:update, 他)
–concurrency SELECT時にシミュレートするクライアントの数
–iterations 実行するテストの回数
–create テーブルの作成使用するSQLをファイルかオプション引数によって指定
–query 実行するSELECT文をファイルかオプション引数によって指定
–number-of-queries クライアントの合計クエリ数を限定する

◼︎ 実践

// クライアント数2で合計50回テストを実行する
$ mysqlslap --delimiter=";" \
--create="CREATE TABLE test (num int);INSERT INTO test VALUES (5)" \
--query="SELECT * FROM test" --concurrency=2 --number-of-queries=50
Benchmark
    Average number of seconds to run all queries: 0.005 seconds
    Minimum number of seconds to run all queries: 0.005 seconds
    Maximum number of seconds to run all queries: 0.005 seconds
    Number of clients running queries: 2
    Average number of queries per client: 25 //25クエリずつ

// selectのsqlを自動生成してクライアント数5のテストを合計10回実行する
$ mysqlslap --auto-generate-sql-load-type=read --auto-generate-sql --concurrency=5 --number-of-queries=10
Benchmark
    Average number of seconds to run all queries: 0.003 seconds
    Minimum number of seconds to run all queries: 0.003 seconds
    Maximum number of seconds to run all queries: 0.003 seconds
    Number of clients running queries: 5
    Average number of queries per client: 2

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧