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 ページでコンテンツの選択、コピー、右クリックを防止する方法の詳細な説明

推薦する

データベース管理における 19 の MySQL 最適化方法

MySQL データベースを最適化すると、データベースの冗長性を削減できるだけでなく、データベースの実...

vue3 コンポーネント通信方法の概要と例

vue3コンポーネントの通信モードは次のとおりです。小道具$放出$expose / 参照$属性vモデ...

IE6 ウェブページ作成リファレンス IE6 デフォルトスタイル

これは実際には IE の公式ドキュメントではありません。他の人が実践を通じて開発した IE6 のデフ...

UDP 接続オブジェクトの原理分析と使用例

以前、UDP を使い始めるために簡単な UDP サーバーとクライアントの例を作成しましたが、実際に使...

MySQLの累積集計原理と使用例の分析

この記事では、例を使用して、MySQL 累積集計の原理と使用方法を説明します。ご参考までに、詳細は以...

MySQL トランザクション制御フローと ACID 特性

目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...

VMware 構成 VMnet8 ネットワーク方法の手順

目次1. はじめに2. 設定手順1. はじめに1. NAT モード (VMnet8) は、仮想マシン...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

JS のあらゆる場所で絶対等価演算子の使用をやめる

目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...

MAC での MYSQL5.7.17 接続失敗の問題と解決策

MYSQL5.7.17 が MAC で接続できない問題。SQLBench_community 6.3...

KVM 仮想マシンのオンライン ホット マイグレーションを実装する方法 (画像とテキスト)

1. KVM仮想マシンの移行方法と注意すべき点KVM 仮想マシンを移行する方法は 2 つあります。...

JavaScript で一意の ID を生成するいくつかの方法

考えられる解決策1. Math.randomは[0,1)の範囲の乱数を生成します。 //今回は生成さ...

Win7 64 ビット版に MySQL 5.7 をダウンロードしてインストールする際によくある問題の概要

1. 公式ウェブサイトからMySQLをダウンロードします。 これが私たちが探しているものです、win...

Vue で Axios カプセル化を使用するための完全なチュートリアル

序文現在、プロジェクトでは、Axios ライブラリが HTTP インターフェース リクエストによく使...