テスト環境で動かしていた時には問題なかったアプリケーションであっても、
今回は、
実行環境
今回は、
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm $ sudo yum install mysql-community-server -y
mysqlslapとは?
mysqlslapとは、
mysqlslapを使うメリットとしては以下の2点があげられます。
まず1点目はインストールが簡単であることです。mysqlコマンドクライアントをインストールした時に同時にインストールされるため、
2点目はオプションが豊富に揃っていることです。並列実行数やSQLの自動生成など、
次に実際に動かしてみて、
実行方法
以下に表示したコマンドを実行します。ユーザやパスワード、
$ mysqlslap -uroot -ppassword -P 3306 -h localhost --auto-generate-sql --iterations=1 --concurrency=1
ここで使用しているオプションを以下の表にまとめました。
オプション | 説明 |
---|---|
-u, --user | MySQLサーバに接続するuser名 |
-p, --password | MySQLサーバに接続する際のパスワード |
-P, --port | MySQLサーバに接続するポート番号 |
-h, --host | 指定したhost上のMySQLに接続する |
--auto-generate-sql | SQLの自動生成を行う |
--iterations | 実行するテストの回数 |
--concurrency | SELECT ステートメントを発行する際、 |
ここでは以上のようなオプションを利用しています。実行した結果は次のようになります。
Benchmark Average number of seconds to run all queries: 0.001 seconds Minimum number of seconds to run all queries: 0.001 seconds Maximum number of seconds to run all queries: 0.002 seconds Number of clients running queries: 1 Average number of queries per client: 0
平均実行時間や最小・
注意点としては、
続いてmysqlslapのベンチマークを行う際に、
--only-printオプション
このオプションを付けて実行すると、
$ mysqlslap -uroot --only-print --auto-generate-sql --auto-generate-sql --iterations=1 --concurrency=1 DROP SCHEMA IF EXISTS `mysqlslap`; CREATE SCHEMA `mysqlslap`; use mysqlslap; CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128)); INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL'); --略-- SELECT intcol1,charcol1 FROM t1; INSERT INTO t1 VALUES (364531492,'qMa5SuKo4M5OM7ldvisSc6WK9rsG9E8sSixocHdgfa5uiiNTGFxkDJ4EAwWC2e4NL1BpAgWiFRcp1zIH6F1BayPdmwphatwnmzdwgzWnQ6SRxmcvtd6JRYwEKdvuWr'); DROP SCHEMA IF EXISTS `mysqlslap`;
出力されたSQLを確認すると、
--auto-generate-sql-guid-primaryオプション
このオプションは、
$ mysqlslap -uroot --only-print --auto-generate-sql --auto-generate-sql-guid-primary
このコマンドを実行すると、
$ mysqlslap -uroot --only-print --auto-generate-sql --auto-generate-sql-guid-primary --略-- CREATE TABLE `t1` (id varchar(32) primary key,intcol1 INT(32) ,charcol1 VARCHAR(128)); INSERT INTO t1 VALUES (uuid(),100669,'qnMdipW5KkXdTjGCh2PNzLoeR0527frpQDQ8uw67Ydk1K06uuNHtkxYBxT5w8plb2BbpzhwYBgPNYX9RmICWGkZD6fAESvhMzH3yqzMtXoH4BQNylbK1CmEIPGYlC6'); --略--
--auto-generate-sql-load-typeオプション
このオプションはSQLを自動生成した時にテストとして生成されるSQLの種類を指定できます。デフォルトではmixedとなっています。オプションの種類と指定できるものは次の表の通りです。
オプション | 生成されるSQL |
---|---|
mixed | 挿入とテーブルスキャンするSELECTが半分ずつ実行 |
read | テーブルスキャンをするSELECTを実行 |
write | テーブルに挿入 |
key | 主キーを使ったSELECTの実行 |
update | update文の実行 |
また、--auto-generate-sql-guid-primary
というオプションを付けて実行しましょう。
--create, --queryオプション
この2つのオプションを使用すると、
使い方は以下のようになります。複数行指定を行っている関係で--delimiter
オプションも使用しています。これは使用するsqlの区切り文字を指定するもので、;
で区切るために使用しています。
$ mysqlslap -uroot --delimiter=";" --create="CREATE TABLE t1 (a int);INSERT INTO t1 VALUES (23)" --query="SELECT * FROM t1"
--only-print
オプションを付けて何が行われるかを確認してみます。
$ mysqlslap -uroot --only-print --delimiter=";" --create="CREATE TABLE t1 (a int);INSERT INTO t1 VALUES (23)" --query="SELECT * FROM t1" DROP SCHEMA IF EXISTS `mysqlslap`; CREATE SCHEMA `mysqlslap`; use mysqlslap; CREATE TABLE t1 (a int); INSERT INTO t1 VALUES (23); SELECT * FROM t1; DROP SCHEMA IF EXISTS `mysqlslap`;
以上のように、
--engineオプション
MySQLにはInnoDBの他にもMyISAMなどのさまざまなストレージエンジンがあります。このオプションに何も指定がなかった場合は、
$ mysqlslap -uroot --auto-generate-sql --engine=InnoDB Benchmark Running for engine InnoDB --略--
ストレージエンジンを指定することで、
以下はMyISAMを指定した時の例になります。
$ mysqlslap -uroot --auto-generate-sql --engine=MyISAM Benchmark Running for engine MyISAM --略--
結果だけを見た時に、
まとめ
今回は、