mysqlslap は MySQL サーバーのクライアント負荷をエミュレートし、各段階のタイミングをレポートする診断プログラムです。複数のクライアントがサーバーにアクセスしているかのように作動します。
mysqlslap は次のように起動します。
shell> mysqlslap [options]
--create
または --query
などのオプションを使用すると、SQL ステートメントを含む文字列やステートメントを含むファイルを指定できます。ファイルを指定した場合、デフォルトでは各行に 1 つのステートメントを含んでいなければなりません。(つまり、暗黙的なステートメント区切り文字は改行文字です。)異なる区切り文字を指定するには、--delimiter
オプションを使用します。これにより、複数行にわたるステートメントを指定したり、1 行に複数のステートメントを配置したりできます。ファイルにコメントを含めることはできません。mysqlslap はそれらを理解しません。
mysqlslap は次の 3 段階で実行されます。
テストに使用するスキーマ、テーブル、およびオプションでストアドプログラムまたはデータを作成します。この段階では、1 つのクライアント接続を使用します。
負荷テストを実行します。この段階では、多数のクライアント接続を使用できます。
クリーンアップ (接続の解除、指定した場合はテーブルの削除) を実行します。この段階では、1 つのクライアント接続を使用します。
例:
50 台のクライアントがクエリーを実行し、それぞれ 200 の選択を行うような、create および query SQL ステートメントを提供します (コマンドは単一行に入力します)。
mysqlslap --delimiter=";"
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)"
--query="SELECT * FROM a" --concurrency=50 --iterations=200
mysqlslap に、2 つの INT
カラムと 3 つの VARCHAR
カラムから成るテーブルを含む query SQL ステートメントを構築させます。5 台のクライアントを使ってそれぞれ 20 回ずつクエリーを実行します。テーブルを作成したり、データを挿入したりしないでください (直前のテストのスキーマとデータを使用します)。
mysqlslap --concurrency=5 --iterations=20
--number-int-cols=2 --number-char-cols=3
--auto-generate-sql
プログラムに、指定のファイルから create、insert、および query SQL ステートメントをロードするように指示します。この場合の create.sql
ファイルには ';'
で区切られた複数のテーブル作成ステートメントと ';'
で区切られた複数の挿入ステートメントが含まれています。--query
ファイルには、';'
で区切られた複数のクエリーが格納されます。5 台のクライアントを使用して、すべての load ステートメントを実行してから、query ファイル内のすべてのクエリーを実行します (それぞれ 5 回ずつ)。
mysqlslap --concurrency=5
--iterations=5 --query=query.sql --create=create.sql
--delimiter=";"
mysqlslap は次のオプションをサポートします。これらはコマンド行またはオプションファイルの [mysqlslap]
グループおよび [client]
グループで指定できます。MySQL プログラムによって使用されるオプションファイルの詳細については、セクション4.2.6「オプションファイルの使用」を参照してください。
表 4.11 mysqlslap のオプション
オプション名 | 説明 | 導入 |
---|---|---|
--auto-generate-sql | SQL ステートメントがファイルおよびコマンドオプションを使用して指定されない場合、自動的に生成 | |
--auto-generate-sql-add-autoincrement | AUTO_INCREMENT カラムを自動生成されたテーブルに追加 | |
--auto-generate-sql-execute-number | 自動的に生成するクエリーの数を指定 | |
--auto-generate-sql-guid-primary | 自動生成されたテーブルに GUID ベースの主キーを追加 | |
--auto-generate-sql-load-type | 自動的に生成するクエリーの数を指定 | |
--auto-generate-sql-secondary-indexes | 自動生成されたテーブルに追加するセカンダリインデックスの数を指定 | |
--auto-generate-sql-unique-query-number | 自動テスト用に生成する異なるクエリーの数。 | |
--auto-generate-sql-unique-write-number | --auto-generate-sql-write-number 用に生成する異なるクエリーの数 | |
--auto-generate-sql-write-number | 各スレッドで実行する行挿入の回数 | |
--commit | コミットの前に実行するステートメントの数。 | |
--compress | クライアントとサーバー間で送信される情報をすべて圧縮 | |
--concurrency | SELECT ステートメントを発行する際、シミュレートするクライアントの数 | |
--create | テーブルの作成に使用するステートメントを含むファイルまたは文字列 | |
--create-schema | テストを実行するスキーマ | |
--csv | カンマ区切りの値の形式で出力を生成 | |
--debug | デバッグのログを書き込み | |
--debug-check | プログラムの終了時にデバッグ情報を出力 | |
--debug-info | プログラムの終了時に、デバッグ情報、メモリー、および CPU の統計を出力 | |
--default-auth | 使用する認証プラグイン | 5.6.2 |
--defaults-extra-file | 通常のオプションファイルに加えてオプションファイルを読み取る | |
--defaults-file | 指名されたオプションファイルのみを読み取る | |
--defaults-group-suffix | オプショングループのサフィクス値 | |
--delimiter | SQL ステートメントで使用する区切り文字 | |
--detach | N 個のステートメントが終わるごとに各接続を切り離す (閉じてからふたたび開く) | |
--enable-cleartext-plugin | 平文の認証プラグインを有効化 | 5.6.7 |
--engine | テーブルの作成に使用するストレージエンジン | |
--help | ヘルプメッセージを表示して終了 | |
--host | 指定されたホスト上で MySQL サーバーに接続 | |
--iterations | 実行するテストの回数 | |
--login-path | ログインパスオプションを .mylogin.cnf から読み取り | 5.6.6 |
--no-defaults | オプションファイルを読み取らない | |
--no-drop | テスト実行中に作成されたスキーマを削除しない | 5.6.3 |
--number-char-cols | --auto-generate-sql が指定された場合に使用する VARCHAR カラムの数 | |
--number-int-cols | --auto-generate-sql が指定された場合に使用する INT カラムの数 | |
--number-of-queries | 各クライアントのクエリー数をおよそこの数に制限 | |
--only-print | データベースに接続しない。mysqlslap が実行したであろう内容を出力するのみ | |
--password | サーバーに接続する際に使用するパスワード | |
--pipe | Windows で、名前付きパイプを使用してサーバーに接続 | |
--plugin-dir | プラグインがインストールされているディレクトリ | 5.6.2 |
--port | 接続に使用する TCP/IP ポート番号 | |
--post-query | テスト完了後に実行するステートメントを含むファイルまたは文字列 | |
--post-system | テスト完了後に system() を使用して実行する文字列 | |
--pre-query | テストの実施前に実行するステートメントを含むファイルまたは文字列 | |
--pre-system | テストの実施前に system() を使用して実行する文字列 | |
--print-defaults | デフォルトを出力 | |
--protocol | 使用する接続プロトコル | |
--query | データ取得のために使用する SELECT ステートメントを含むファイルまたは文字列 | |
--secure-auth | 古い (4.1.1 より前の) 形式でサーバーにパスワードを送信しない | 5.6.17 |
--shared-memory-base-name | 共有メモリー接続に使用する共有メモリーの名前 | |
--silent | サイレントモード | |
--socket | ローカルホストへの接続で、使用する Unix ソケットファイル | |
--ssl | 接続に SSL を有効化 | |
--ssl-ca | 信頼された SSL CA のリストを含むファイルのパス | |
--ssl-capath | 信頼された SSL CA の PEM 形式の証明書を含むディレクトリのパス | |
--ssl-cert | PEM 形式の X509 証明書を含むファイルのパス | |
--ssl-cipher | SSL の暗号化に使用される、許可された暗号のリスト | |
--ssl-crl | 証明書失効リストを含むファイルのパス | 5.6.3 |
--ssl-crlpath | 証明書失効リストファイルを含むディレクトリのパス | 5.6.3 |
--ssl-key | PEM 形式の X509 鍵を含むファイルのパス | |
--ssl-verify-server-cert | サーバーへの接続時に、サーバーの証明書内のコモンネーム値をホスト名に対して検証 | |
--user | サーバーへの接続時に使用する MySQL ユーザー名 | |
--verbose | 冗長モード | |
--version | バージョン情報を表示して終了 |
-
ヘルプメッセージを表示して終了します。
-
SQL ステートメントがファイルおよびコマンドオプションを使用して指定されない場合、自動的に生成します。
-
--auto-generate-sql-add-autoincrement
AUTO_INCREMENT
カラムを自動生成されたテーブルに追加します。 -
--auto-generate-sql-execute-number=
N
自動的に生成するクエリーの数を指定します。
-
--auto-generate-sql-guid-primary
自動生成されたテーブルに GUID ベースの主キーを追加します。
-
--auto-generate-sql-load-type=
type
テストの負荷タイプを指定します。許可される値は、
read
(テーブルのスキャン)、write
(テーブルに挿入)、key
(主キーの読み取り)、update
(主キーの更新)、またはmixed
(挿入とスキャンして選択が半分ずつ) です。デフォルトはmixed
です。 -
--auto-generate-sql-secondary-indexes=
N
自動生成されたテーブルに追加するセカンダリインデックスの数を指定します。デフォルトでは、何も追加されません。
-
--auto-generate-sql-unique-query-number=
N
自動テスト用に生成する異なるクエリーの数。たとえば、1000 回の選択を行う
key
テストを実施する場合、このオプションの値を 1000 にして一意のクエリーを 1000 個実行することも、値を 50 にして異なるクエリーを 50 回行うこともできます。デフォルトは 10 です。 -
--auto-generate-sql-unique-write-number=
N
--auto-generate-sql-write-number
用に生成する異なるクエリーの数を指定します。デフォルトは 10 です。 -
--auto-generate-sql-write-number=
N
各スレッドで実行する行挿入の回数を指定します。デフォルトは 100 です。
-
コミットの前に実行するステートメントの数。デフォルトは 0 (コミットは行われない) です。
-
クライアントとサーバーの両方が圧縮をサポートしている場合、その間で送受信される情報をすべて圧縮します。
-
SELECT
ステートメントを発行する場合に、シミュレートするクライアントの数。 -
テーブルの作成に使用するステートメントを含むファイルまたは文字列。
-
テストを実行するスキーマ。
注記--auto-generate-sql
オプションも指定されている場合、mysqlslap はテスト実行の最後にスキーマを削除します。これを避けるには、--no-drop
オプションも使用します。 -
カンマ区切りの値の形式で出力を生成します。出力は指定されたファイルか、ファイルが指定されていない場合標準出力に送られます。
-
--debug[=
,debug_options
]-# [
debug_options
]デバッグのログを書き込みます。一般的な
debug_options
文字列はd:t:o,
です。デフォルトはfile_name
d:t:o,/tmp/mysqlslap.trace
です。 -
プログラムの終了時に、デバッグ情報を出力します。
-
プログラムの終了時に、デバッグ情報とメモリーおよび CPU 使用率の統計を出力します。
-
使用するクライアント側の認証プラグイン。セクション6.3.7「プラガブル認証」を参照してください。
このオプションは MySQL 5.6.2 で追加されました。
-
--defaults-extra-file=
file_name
このオプションファイルは、グローバルオプションファイルのあとに読み取りますが、(UNIX では) ユーザーオプションファイルの前に読み取るようにしてください。ファイルが存在しないかアクセスできない場合、エラーが発生します。
file_name
は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。 -
指定されたオプションファイルのみ使用します。ファイルが存在しないかアクセスできない場合、エラーが発生します。
file_name
は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。 -
通常のオプショングループだけでなく、通常の名前に
str
のサフィクスが付いたグループも読み取ります。たとえば、mysqlslap は通常[client]
グループおよび[mysqlslap]
グループを読み取ります。--defaults-group-suffix=_other
オプションを指定した場合、mysqlslap は[client_other]
グループおよび[mysqlslap_other]
グループも読み取ります。 -
ファイルまたはコマンドオプションを使用して提供される SQL ステートメントで使用される区切り文字。
-
N
個のステートメントごとに各接続を切り離します (閉じてからふたたび開きます)。デフォルトは 0 (接続は切り離されない) です。 -
mysql_clear_password
平文認証プラグインを有効にします。(セクション6.3.8.7「クライアント側のクリアテキスト認証プラグイン」を参照してください。)このオプションは MySQL 5.6.7 で追加されました。 -
--engine=
,engine_name
-e
engine_name
テーブルの作成に使用するストレージエンジンを指定します。
-
--host=
,host_name
-h
host_name
指定されたホストの MySQL サーバーに接続します。
-
実行するテストの回数。
-
指名されたログインパスから
.mylogin.cnf
ログインファイルのオプションを読み取ります。「ログインパス」は、host
、user
、およびpassword
という限定されたオプションのセットのみを許可するオプショングループです。ログインパスは、サーバーホストおよびそのサーバーで認証するための認証情報を示す値のセットであると考えてください。ログインパスファイルを作成するには、mysql_config_editor ユーティリティーを使用します。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。このオプションは MySQL 5.6.6 で追加されました。 -
mysqlslap がテスト実行中に作成するスキーマをドロップしないようにします。このオプションは MySQL 5.6.3 で追加されました。
-
オプションファイルを読み取りません。オプションファイルから不明のオプションを読み取ることが原因でプログラムの起動に失敗する場合、
--no-defaults
を使用して、オプションを読み取らないようにできます。例外として、
.mylogin.cnf
ファイルは、存在する場合はすべての場合に読み取られます。これにより、--no-defaults
が使用された場合にも、コマンド行よりも安全な方法でパスワードを指定できます。(.mylogin.cnf
は mysql_config_editor ユーティリティーによって作成されます。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください)。 -
--auto-generate-sql
が指定されている場合に使用するVARCHAR
カラムの数。 -
--auto-generate-sql
が指定されている場合に使用するINT
カラムの数。 -
各クライアントのクエリー数をおよそこの数に制限します。クエリーのカウントには、ステートメント区切り文字が考慮されます。たとえば、mysqlslap を次のように起動する場合、
;
区切り文字が認識され、クエリー文字列の各インスタンスは 2 つのクエリーとカウントされます。その結果、(10 ではなく) 5 つの行が挿入されます。shell> mysqlslap --delimiter=";" --number-of-queries=10 --query="use test;insert into t values(null)"
-
データベースには接続しません。mysqlslap は、実行したであろう内容を出力するだけです。
-
--password[=
,password
]-p[
password
]サーバーに接続する際に使用するパスワードです。短いオプション形式 (
-p
) を使用した場合は、オプションとパスワードの間にスペースを置くことはできません。コマンド行で、--password
オプションまたは-p
オプションに続けてpassword
の値を指定しなかった場合、mysqlslap はそれを要求します。コマンド行でのパスワード指定は、セキュアでないと考えるべきです。セクション6.1.2.1「パスワードセキュリティーのためのエンドユーザーガイドライン」を参照してください。オプションファイルを使用すれば、コマンド行でパスワードを指定することを回避できます。
-
Windows で、名前付きパイプを使用してサーバーに接続します。このオプションは、サーバーが名前付きパイプ接続をサポートしている場合にのみ適用されます。
-
プラグインを検索するディレクトリ。
--default-auth
オプションを使用して認証プラグインを指定したが、mysqlslap がそれを検出できない場合は、このオプションを指定しなければならない可能性があります。セクション6.3.7「プラガブル認証」を参照してください。このオプションは MySQL 5.6.2 で追加されました。
-
接続に使用する TCP/IP ポート番号。
-
テスト完了後に実行するステートメントを含むファイルまたは文字列。この実行は、タイミングの目的ではカウントされません。
-
テスト完了後に
system()
を使用して実行する文字列。この実行は、タイミングの目的ではカウントされません。 -
テストの実行前に実行するステートメントを含むファイルまたは文字列。この実行は、タイミングの目的ではカウントされません。
-
テストの実行前に
system()
を使用して実行する文字列。この実行は、タイミングの目的ではカウントされません。 -
プログラム名と、オプションファイルから受け取るすべてのオプションを出力します。
-
--protocol={TCP|SOCKET|PIPE|MEMORY}
サーバーへの接続に使用する接続プロトコル。このオプションは、ほかの接続パラメータによって、必要なプロトコル以外のものが通常使用される場合に役立ちます。許可される値の詳細は、セクション4.2.2「MySQL サーバーへの接続」を参照してください。
-
データ取得のため使用する
SELECT
ステートメントを含むファイルまたは文字列。 -
古い (4.1 より前の) 形式でサーバーにパスワードを送信しません。これにより、新しいパスワード形式を使用するサーバー以外への接続を防ぎます。このオプションはデフォルトで有効です。無効にするには
--skip-secure-auth
を使用します。このオプションは MySQL 5.6.17 で追加されました。注記4.1 より前のハッシュ方式を使用するパスワードはネイティブのパスワードハッシュ方式を使用するパスワードよりもセキュアでないため、使用しないようにしてください。4.1 よりも前のパスワードは非推奨であり、これらのサポートは今後の MySQL リリースで削除される予定です。アカウントのアップグレード手順については、セクション6.3.8.3「4.1 よりも前のパスワードハッシュ方式と mysql_old_password プラグインからの移行」を参照してください。
-
--shared-memory-base-name=
name
Windows で、共有メモリーを使用して作成されるローカルサーバーへの接続の共有メモリー名。このオプションは、サーバーが共有メモリー接続をサポートしている場合にのみ適用されます。
-
サイレントモード。出力はありません。
-
localhost
への接続用に使用する、Unix ソケットファイル、または Windows では使用する名前付きパイプの名前。 -
--ssl
で始まるオプションは、SSL を使用してサーバーに接続することを許可するかどうかを指定し、SSL 鍵および証明書を検索する場所を指定します。セクション6.3.10.4「SSL コマンドのオプション」を参照してください。 -
--user=
,user_name
-u
user_name
サーバーへの接続時に使用する MySQL ユーザー名。
-
冗長モード。プログラムの動作についてより多くの情報を出力します。このオプションは情報量を増加させるために複数回使用できます。
-
バージョン情報を表示して終了します。