MySQL ストレステストツール Mysqlslap の使用

MySQL ストレステストツール Mysqlslap の使用

1. MySQL独自のストレステストツールMysqlslap

mysqlslap は、mysql に付属するベンチマーク ツールです。このツールは、シンプルな構文でデータをクエリし、柔軟で使いやすいです。このツールは、複数のクライアントが同時にサーバーにクエリ更新を送信することをシミュレートし、パフォーマンス テスト データを提供し、複数のエンジンのパフォーマンス比較を提供します。 mysqlslap は、最適化の前後の MySQL パフォーマンスを直感的に検証する基盤を提供します。システム運用と保守、および DBA 担当者は、オンライン データベースがサポートするユーザー トラフィックの上限とそのストレス耐性を正確に把握するために、いくつかの一般的なストレス テスト ツールを習得する必要があります。

1. デフォルトの最大接続数を変更する

MySQL のストレス テストを実行する前に、デフォルトの最大接続数を次のように変更する必要があります。

[root@mysql ~]# vim /etc/my.cnf
................
[mysqld]
最大接続数=1024
[root@mysql ~]# systemctl mysqldを再起動します
`

最大接続数を表示します `mysql> show variables like 'max_connections';
+-----------------+-------+
| 変数名 | 値 |
+-----------------+-------+
| 最大接続数 | 1024 |
+-----------------+--------+
セット内の 1 行 (0.00 秒)

ストレステストを実行するには:

[root@mysql ~]# mysqlslap --defaults-file=/etc/my.cnf --concurrency=100,200 --iterations=1 --number-int-cols=20 --number-char-cols=30
 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam,innodb --number-of-queries=2000 -uroot -p123 --verbose

上記コマンドのテストの説明: 2 つの読み取りおよび書き込み同時実行テストをシミュレートします。1 回目は 100、2 回目は 200 で、SQL スクリプトが自動的に生成されます。テスト テーブルには、20 個の init フィールドと 30 個の char フィールドが含まれます。毎回 2000 件のクエリ要求が実行されます。テスト エンジンは myisam と innodb です。 (上記オプションの多くはデフォルト値であり、省略可能です。各オプションの説明を知りたい場合は、mysqlslap --help で問い合わせることができます)。

テスト結果の説明:

  • Myisam では、100 台のクライアントが同時に追加のチェックを開始したときに初めて 0.557/秒かかり、200 台のクライアントが同時に追加のチェックを開始したときに 2 回目に 0.522/秒かかります。
  • Innodb は、100 台のクライアントが同時に増分クエリを開始したときに初めて 0.256/秒を使用し、200 台のクライアントが同時に増分クエリを開始したときに 0.303/秒を使用します。

実際のニーズに応じて、同時リクエストの数を少しずつ増やしてストレス テストを実行できます。

2. ストレステストにはサードパーティのsysbenchツールを使用する

1. sysbenchツールをインストールする

[root@mysql ~]# yum -y install epel-release #サードパーティのepelソースをインストールします[root@mysql ~]# yum -y install sysbench #sysbenchツールをインストールします[root@mysql ~]# sysbench --version #ツールがインストールされていることを確認します sysbench 1.0.17

Sysbench は次のテストを実行できます。

  • CPUコンピューティングパフォーマンステスト
  • ディスクIOパフォーマンステスト
  • スケジューラのパフォーマンステスト
  • メモリ割り当てと転送速度テスト
  • POSIX スレッドパフォーマンステスト

データベース パフォーマンス テスト (OLTP ベンチマーク テスト。読み取り専用テストを実行するための oltp_read_only.lua スクリプトなど、/usr/share/sysbench/ ディレクトリ内の Lua スクリプトを通じて実行する必要があります)。

Sysbench では、コマンドを実行するときに独自の Lua スクリプトを指定してテストをカスタマイズすることもできます。

2. sysbenchツールのヘルプオプションを表示する

[root@mysql ~]# sysbench --help
使用法:
sysbench [オプション]... [テスト名] [コマンド]
ほとんどのテストで実装されているコマンド: prepare run cleanup help # 使用可能なコマンドは 4 つ 一般オプション: # 一般オプション --threads=N 使用するスレッドの数。デフォルトは 1 [1]
--events=N 許可されるイベントの最大数 [0]
--time=N 最大合計実行時間(秒)[10]
--forced-shutdown=STRING 強制シャットダウンまでの --time 制限後の待機秒数、または無効にする場合は 'off' [off]
--thread-stack-size=SIZE 各スレッドのスタックサイズ [64K]
--rate=N 平均転送速度。 0は制限なしを意味する[0]
--report-interval=N 指定された間隔(秒)で定期的に中間統計を報告します 0 中間報告を無効にします [0]
--report-checkpoints=[LIST,...] 完全な統計情報をダンプし、指定された時点ですべてのカウンターをリセットします。このパラメータは、テストの開始からこの時間(秒単位)が経過したときにレポート チェックポイントを実行する必要があることを示す値のコンマ区切りリストです。レポートのチェックポイントはデフォルトではオフになっています。 []
--debug[=on|off] 詳細なデバッグ情報を出力します [off]
--validate[=on|off] 可能な場合は検証チェックを実行します [off]
--help[=on|off] ヘルプメッセージを表示して終了する [off]
--version[=on|off] バージョン情報を表示して終了する [off]
--config-file=FILENAME コマンドラインオプションを含むファイル --tx-rate=N 非推奨、代わりに --rate [0] を使用してください
--max-requests=N は非推奨です。代わりに --events [0] を使用してください。
--max-time=N は非推奨です。代わりに --time [0] を使用してください。
--num-threads=N は非推奨です。代わりに --threads を使用してください [1]
疑似乱数ジェネレーターのオプション: # 疑似乱数ジェネレーターのオプション --rand-type=STRING 乱数分布 {uniform,gaussian,special,pareto} [special]
--rand-spec-iter=N 数値生成に使用する反復回数 [12]
--rand-spec-pct=N '特別' として扱われる値のパーセンテージ(特別分布用)[1]
--rand-spec-res=N 使用する「特別な」値のパーセンテージ(特別な分布用)[75]
--rand-seed=N 乱数ジェネレータのシード。0 の場合、現在の時刻が RNG シードとして使用されます。[0]
--rand-pareto-h=N パレート分布のパラメータh [0.2]
ログオプション: # ログオプション --verbosity=N 詳細レベル {5 - デバッグ、0 - 重要なメッセージのみ} [3]
--percentile=N レイテンシ統計を計算するパーセンタイル(1-100)。パーセンタイル計算を無効にするには、特別な値0を使用します [95]
--histogram[=on|off] レポートにレイテンシヒストグラムを出力する [off]
一般的なデータベース オプション: # 一般的なデータベース オプション --db-driver=STRING 使用するデータベース ドライバーを指定します (使用可能なドライバーの一覧を取得するには 'help' を使用します)
--db-ps-mode=STRING 準備されたステートメントの使用モード {auto, disabled} [auto]
--db-debug[=on|off] データベース固有のデバッグ情報を出力します [off]
コンパイルされたデータベース ドライバー: # デフォルトで MySQL と PostgreSQL をサポートする組み込みデータベース ドライバー
MySQL ドライバー
pgsql - PostgreSQL ドライバ
mysql オプション: # MySQL データベース固有のオプション --mysql-host=[LIST,...] MySQL サーバー ホスト [localhost]
--mysql-port=[LIST,...] MySQLサーバポート[3306]
--mysql-socket=[LIST,...] MySQLソケット
--mysql-user=STRING MySQLユーザー [sbtest]
--mysql-password=STRING MySQLパスワード []
--mysql-db=STRING MySQLデータベース名 [sbtest]
--mysql-ssl[=on|off] クライアントライブラリで利用可能な場合はSSL接続を使用する [off]
--mysql-ssl-cipher=STRING SSL接続に特定の暗号を使用する []
--mysql-compression[=on|off] クライアントライブラリで利用可能な場合は圧縮を使用する [off]
--mysql-debug[=on|off] すべてのクライアントライブラリ呼び出しをトレースします [off]
--mysql-ignore-errors=[LIST,...] 無視するエラーのリスト、または「すべて」 [1213,1020,1205]
--mysql-dry-run[=on|off] ドライラン。すべてのMySQLクライアントAPI呼び出しを実行せずに成功したと仮定します[オフ]
pgsql オプション: # PostgreSQL データベース固有のオプション --pgsql-host=STRING PostgreSQL サーバー ホスト [localhost]
--pgsql-port=N PostgreSQLサーバポート [5432]
--pgsql-user=STRING PostgreSQLユーザー [sbtest]
--pgsql-password=STRING PostgreSQLパスワード []
--pgsql-db=STRING PostgreSQLデータベース名 [sbtest]
コンパイル済みテスト: # 組み込みテストタイプ fileio - ファイル I/O テスト
cpu - CPU パフォーマンス テスト
メモリ - メモリ機能の速度テスト
スレッド - スレッドサブシステムのパフォーマンステスト
mutex - ミューテックスパフォーマンステスト
各テストのオプションのリストについては、「sysbench <testname> help」を参照してください。

3. SysbenchはMySQLデータベースのパフォーマンスをテストします

1) テストデータの準備

#sysbench に付属する lua スクリプトの使用方法を表示します [root@mysql ~]# sysbench /usr/share/sysbench/oltp_common.lua help
# sbtest ライブラリを作成する必要があります。sbtest は sysbench で使用されるデフォルトのライブラリ名です [root@mysql ~]# mysqladmin -uroot -p123 create sbtest;
#次に、テストに使用するテーブルを準備します。これらのテスト テーブルは、テスト ライブラリ sbtest に配置されます。ここで使用される lua スクリプトは /usr/share/sysbench/oltp_common.lua です。
[root@mysql ~]# sysbench --mysql-host=127.0.0.1
 --mysql-ポート=3306
 --mysql-user=root
 --mysqlパスワード=123
 oltp_common.lua は、
 --テーブル=10
 --テーブルサイズ=100000
 準備する
#--tables=10 は 10 個のテスト テーブルを作成することを意味します。
#--table_size=100000 は、各テーブルに 100,000 行のデータを挿入することを意味します。
#prepare は、これが数値を準備するプロセスであることを示します。

2) テストデータが存在することを確認する

[root@mysql ~]# mysql -uroot -p123 sbtest; #sbtest ライブラリにログインmysql> show tables; #対応するテーブルを表示+------------------+
| sbtest 内のテーブル |
+------------------+
|sbtest1|
|sbtest10|
|sbテスト2|
|sbtest3|
|sbテスト4|
|sbtest5|
|sbtest6|
|sbtest7|
|sbtest8|
|sbtest9|
+------------------+
セット内の行数は 10 です (0.00 秒)
mysql> select count(*) from sbtest1; #テーブルをランダムに選択し、100,000件のレコードがあることを確認します+----------+
| カウント(*) |
+----------+
| 100000 |
+----------+
セット内の1行(0.01秒)

3) データベースのテストと結果分析

以前にデータを準備したステートメントを少し変更すると、テストに使用できます。以前使用した Lua スクリプトは oltp_common.lua であり、これは他の Lua スクリプトによって呼び出される共通スクリプトであり、テストに直接使用できないことに注意してください。

したがって、読み取りテストと書き込みテストを実行するには、oltp_read_write.lua スクリプトを使用します。読み取り専用テスト、書き込み専用テスト、削除テスト、一括挿入テストなど、他の多くの種類のテストがあります。対応する lua スクリプトを見つけて呼び出すことができます。

#次のようにテストコマンドを実行します。
[root@mysql ~]# sysbench --threads=4
 --時間=20
 --レポート間隔=5
 --mysql-ホスト=127.0.0.1
 --mysql-ポート=3306
 --mysql-user=root
 --mysqlパスワード=123
 oltp_read_write.lua は、以下のいずれかの形式で保存されます。
 --テーブル=10
 --テーブルサイズ=100000
 走る

上記のコマンドは次の結果を返します。

[root@mysql ~]# sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 実行
sysbench 1.0.17 (システム LuaJIT 2.0.4 を使用)
次のオプションでテストを実行します。
スレッド数: 4
5秒ごとに中間結果を報告します
現在の時刻から乱数ジェネレータを初期化しています
ワーカー スレッドを初期化しています...
スレッドが始まりました!
# 以下は 5 秒ごとに返される結果です。統計指標には次のものが含まれます。
# スレッド数、tps(1秒あたりのトランザクション数)、qps(1秒あたりのクエリ数)、
# 1 秒あたりの読み取り/書き込み/その他の回数、遅延、1 秒あたりのエラー、1 秒あたりの再接続 [ 5 秒 ] thds: 4 tps: 1040.21 qps: 20815.65 (r/w/o: 14573.17/4161.25/2081.22) lat (ms,95%): 7.17 err/s: 0.00 reconn/s: 0.00
[ 10 秒 ] スレッド: 4 tps: 1083.34 qps: 21667.15 (r/w/o: 15165.93/4334.55/2166.68) lat (ms,95%): 6.55 エラー/秒: 0.00 偵察/秒: 0.00
[ 15 秒 ] スレッド: 4 tps: 1121.57 qps: 22429.09 (r/w/o: 15700.64/4485.30/2243.15) lat (ms,95%): 6.55 エラー/秒: 0.00 偵察/秒: 0.00
[ 20 秒 ] スレッド数: 4 tps: 1141.69 qps: 22831.98 (r/w/o: 15982.65/4566.16/2283.18) lat (ms,95%): 6.09 エラー/秒: 0.00 偵察/秒: 0.00
SQL 統計:
実行されたクエリ:
read: 307146 # 実行された読み取り操作の数write: 87756 # 実行された書き込み操作の数other: 43878 # 実行されたその他の操作の数total: 438780
トランザクション: 21939 (1096.57/秒) # トランザクション実行クエリの平均レート: 438780 (21931.37/秒) # 無視されたエラーで 1 秒あたりに実行されたクエリの平均数: 0 (0.00/秒)
再接続: 0 (0.00/秒)
一般的な統計:
合計時間: 20.0055 秒 # 消費された合計時間 イベントの合計数: 21939 # リクエストの合計数 (読み取り、書き込み、その他)
レイテンシー(ミリ秒):
最小: 1.39
平均: 3.64
最大: 192.05
95 パーセンタイル: 6.67 # サンプリング合計で計算された平均レイテンシ: 79964.26
スレッドの公平性:
イベント数 (平均/標準偏差): 5484.7500/15.12
実行時間 (平均/標準偏差): 19.9911/0.00

4. CPU/IO/メモリなどのテスト

sysbench に組み込まれているいくつかのテスト インジケーターは次のとおりです。

[root@mysql ~]# sysbench --help
.......... # 一部のコンテンツを省略 コンパイルされたテスト:
fileio - ファイルI/Oテスト
cpu - CPU パフォーマンス テスト
メモリ - メモリ機能の速度テスト
スレッド - スレッドサブシステムのパフォーマンステスト
mutex - ミューテックスパフォーマンステスト

出力テスト メソッドを直接支援できます (例: fileio test)。

[root@mysql ~]# sysbench ファイル入出力ヘルプ
sysbench 1.0.17 (システム LuaJIT 2.0.4 を使用)
ファイル入出力オプション:
--file-num=N 作成するファイルの数 [128]
--file-block-size=N すべてのIO操作で使用するブロックサイズ [16384]
--file-total-size=SIZE 作成するファイルの合計サイズ [2G]
--file-test-mode=STRING テストモード {seqwr、seqrewr、seqrd、rndrd、rndwr、rndrw}
--file-io-mode=STRING ファイル操作モード {sync,async,mmap} [sync]
--file-async-backlog=N スレッドごとにキューに入れる非同期操作の数 [128]
--file-extra-flags=[LIST,...] ファイルを開くときに使用する追加フ​​ラグのリスト {sync,dsync,direct} []
--file-fsync-freq=N この回数のリクエスト後にfsync()を実行します(0 - fsync()を使用しない)[100]
--file-fsync-all[=on|off] 各書き込み操作後にfsync()を実行する [オフ]
--file-fsync-end[=on|off] テスト終了時にfsync()を実行する [on]
--file-fsync-mode=STRING 同期に使用する方法 {fsync, fdatasync} [fsync]
--file-merged-requests=N 可能であれば、最大でこの数の IO 要求をマージします (0 - マージしない) [0]
--file-rw-ratio=N 複合テストの読み取り/書き込み比率 [1.5]

1) IOパフォーマンスをテストする

たとえば、合計 2G のファイルを 5 つ作成し、各ファイルのサイズが約 400M であるとします。

[root@mysql ~]# sysbench fileio --file-num=5 --file-total-size=2G を準備します
[root@mysql ~]# ll -lh テスト*
-rw------ 1 ルート ルート 410M 5月26日 16:05 test_file.0
-rw------ 1 ルート ルート 410M 5月26日 16:05 test_file.1
-rw------ 1 ルート ルート 410M 5月26日 16:05 test_file.2
-rw------ 1 ルート ルート 410M 5月26日 16:05 test_file.3
-rw------ 1 ルート ルート 410M 5月26日 16:05 test_file.4

次にテストを実行します。

[root@mysql ~]# sysbench --events=5000
 --スレッド=16
 ファイル
 --ファイル番号=5
 --ファイル合計サイズ=2G
 --file-test-mode=rndrw
 --file-fsync-freq=0
 --ファイルブロックサイズ=16384
 走る

返される結果は次のとおりです。

次のオプションでテストを実行します。
スレッド数: 16
現在の時刻から乱数ジェネレータを初期化しています
追加のファイルオープンフラグ: (なし)
5 つのファイル、それぞれ 409.6MiB
合計ファイルサイズ 2GiB
ブロックサイズ 16KiB
IO リクエスト数: 5000
複合ランダムIOテストの読み取り/書き込み比: 1.50
テスト終了時に fsync() を呼び出します。有効です。
同期I/Oモードの使用
ランダム読み取り/書き込みテストを実行
ワーカー スレッドを初期化しています...
スレッドが始まりました!
ファイル操作:
読み取り/秒: 9899.03
書き込み数/秒: 6621.38
fsyncs/秒: 264.33
スループット: # 読み取りスループット、MiB/s: 154.66 # 読み取り帯域幅を示します 書き込み、MiB/s: 103.46 # 書き込み帯域幅を示します 一般的な統計:
合計時間: 0.3014秒
イベント総数: 5000
レイテンシー(ミリ秒):
最小: 0.00
平均: 0.81
最大: 53.56
95パーセンタイル: 4.10
合計: 4030.48
スレッドの公平性:
イベント数 (平均/標準偏差): 312.5000/27.64
実行時間(平均/標準偏差): 0.2519/0.02

2) CPUパフォーマンスをテストする

[root@mysql ~]# sysbench cpu --threads=40 --events=10000 --cpu-max-prime=20000 実行

ストレステストを行う際は注意してください。 ! ! !

以上がMySQLストレステストツールMysqlslapの使い方の詳細内容です。Mysqlslapの使い方の詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • MySQL 5.7 に組み込まれているストレス テストの mysqlslap コマンドと構文の詳細な説明
  • MySQL ストレステストツール mysqlslap の紹介と使用
  • MySQL ストレス テスト方法 mysqlslap を使用して MySQL ストレスをテストする方法は?
  • Mysqlslap MySQL ストレステストツールの簡単なチュートリアル
  • MySQL公式パフォーマンステストツールmysqlslapの使い方の紹介

<<:  Vue フロントエンド開発における keepAlive の使用方法の詳細な説明

>>:  HTML ページでコンテンツの選択、コピー、右クリックを防止する方法の詳細な説明

推薦する

フロントエンドエンジニアが作ったクールなインタラクティブウェブサイトを推薦します

ウェブサイトリンク: http://strml.net/サミュエル・リード著ヒント: 昨日、Mome...

Ubuntu 20.04 ダブルピンイン入力方式のインストール手順

1. 中国語入力方法を設定する 2. ダブルスペルモードを設定する 3. 注意事項20.04 で S...

Docker管理に関する断片的な知識のまとめ

目次1. 概要2. 応用例2.1、Docker コンテナ分離名前空間2.2. Docker のフリー...

Element-ui レイアウト (行と列コンポーネント) の実装

目次基本的な手順と使用方法行コンポーネントの分析レンダリング機能ソースコード分析Col成分の分析コン...

モバイル端末の適応に関する簡単な説明

序文フロントエンド コードの記述では、「互換性」という言葉から逃れることはできません。過去の PC ...

ページングクリックコントロールを実装するネイティブJS

これは、ネイティブJSを使用してページングクリックコントロールを実装する必要がある面接の質問です。参...

Vueのフィルターとディレクティブの詳細な説明

目次vueカスタムディレクティブグローバル指令ローカル指示使用フック関数(両方ともオプション)使用方...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

Vue で親子コンポーネントの値を双方向バインドするために v-model を使用するときに発生する問題と解決策

目次シナリオ解決してみる解決するシナリオ今日、コンポーネントの双方向データバインディングにv-mod...

MySQL 5.7.17 zip インストールおよび設定チュートリアル MySQL 起動失敗の解決策

MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...

JavaScript でドラッグ スライダー パズルの検証機能を実装します (html5、canvas)

導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...

LDAP ユーザー認証を使用するように Linux を構成する方法

私は CentOS に実装された LDAP ユーザー管理を使用しています。これはインターネット上のほ...

Docker用国産イメージウェアハウスの使い方

1. 問題の説明何らかの理由により、中国でのDockerイメージのダウンロード速度は特に遅くなります...

Webデザインチュートリアル(1):手順と全体レイアウト

<br />注:ウェブサイトの種類を示すものを除くすべてのテキストは、企業サイト用です。...

webpackでvue環境を構築する際の異常なエラーを解決する

目次まず、package.jsonを設定します次にwebpackツールをインストールしますwebpa...