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

◼︎ 目次

  1. 概要
  2. メリット
  3. 導入方法
  4. 使用方法
  5. 実践

◼︎ 概要

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

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です