【MySQL】mysqlslapを使って負荷テストをする

  • 2021年3月2日
  • 2021年3月11日
  • 広告
  • 0件

MySQLでmysqlslapを使って負荷テストをしてみる

mysqlslapとは、MySQLが公式で提供サポートしている負荷ツールです。今回は、このツールを使って検証してみます。
slapは平手打ちという意味もありますので、ひたすら叩くという意味合いで付いたんでしょうか。

mysqlslapをインストールする

下記コマンドでインストールします。

$ yum install mysql-bench

mysqlslapを実行する

下記のようにすることで実行することができます。下記のサンプルは、ローカルでrootユーザで実行しています。

$ mysqlslap \
  --host=localhost \
  --port=3306 \
  --user=root \
  --no-defaults \
  --engine=innodb \
  --iterations=10 \
  --concurrency=100 \
  --auto-generate-sql \
  --auto-generate-sql-add-autoincrement \
  --auto-generate-sql-load-type=mixed \
  --auto-generate-sql-write-number=1000 \
  --number-of-queries=100 \

実行すると、下記のような結果が返ってきました。

  Benchmark
    Running for engine innodb
    Average number of seconds to run all queries: 1.809 seconds
    Minimum number of seconds to run all queries: 1.651 seconds
    Maximum number of seconds to run all queries: 1.114 seconds
    Number of clients running queries: 100
    Average number of queries per client: 1000

サーバのスペック差はありますが、最小値と最大値の差が少なく安定的に捌けていますので、概ね問題なく捌けていそうです。負荷テスト時には、様々なケースを想定したシナリオを作るケースがあるかと思いますので、オプションについて、説明していきます。

オプションコマンドについての解説

  • –no-defaults
    デフォルト値を読み込まなくなります。

  • –concurrency
    参照のSELECTクエリ実行時に、負荷をかけるクライアント数を設定します。

  • –iterations
    負荷テストをする回数を指定します。何回か負荷をかけて、タイミング的な違いにならないように、平均値をとるために設定します。10回で設定しておくのが良さそうです。

  • –number-int-cols
    intカラムの数を指定します。50くらいの値が推奨値になります。

  • –number-char-cols
    varcharのカラムの数を指定します。50くらいの値が推奨値になります。

  • –engine
    検証するストレージエンジンを指定できます。ほとんどの場合は、InnoDBもしくはMyISAMで事足りそうです。

  • –auto-generate-sql
    負荷テスト用のSQLを自動生成してくれます。

  • –auto-generate-sql-load-type
    クエリのタイプを指定します。readと書くと参照クエリのみ、writeはinsertクエリ、keyは主キーの読み取り、mixedは参照クエリと更新クエリを半々にして実行してくれます。

  • –auto-generate-sql-write-number
    スレッド毎のinsertクエリの発行数です。特に指定がなければ、デフォルトで100になります。

  • –number-of-queries
    各クライアントで実行するクエリの数を指定します。

  • –host
    負荷テスト対象ホストを指定します。

  • –port
    コネクションに使うポート番号を指定します。

  • –user
    MySQLのユーザ名を指定します。

  • –create-schema
    テストを実行するDB名を指定できます。実行後は、データは空になります。

  • –password
    MySQLに接続するユーザのパスワードを指定します。

  • -–no-drop
    通常だと、テスト時にテスト用データベースを作って、テストして、終わったら消すいうことをしていますが、削除したくない場合は、このオプションを入れることで回避することができます。