MySQL ストレステストツールの使い方

MySQL ストレステストツールの使い方

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つの読み取りおよび書き込み同時実行テストをシミュレートします。最初の時間は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 台のクライアントが同時に追加のクエリを開始したときに 2 回目に 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
#sysbench で使用されるデフォルトのライブラリ名である sbtest ライブラリを作成する必要があります [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 \
> /usr/share/sysbench/oltp_common.lua \
> --tables=10 \
> --table_size=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 \
> --time=20 \
> --レポート間隔=5 \
> --mysql-ホスト=127.0.0.1 \
> --mysql-ポート=3306 \
> --mysql-user=root \
> --mysql-パスワード=123 \
> /usr/share/sysbench/oltp_read_write.lua \
> --tables=10 \
> --table_size=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 \
> ファイルio \
> --ファイル番号=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 ストレステストツールの使い方に関するこの記事はこれで終わりです。MySQL ストレステストツールの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  VueとElementUIを組み合わせたスキン変更ソリューション

>>:  Jenkins+tomcat の自動ホットデプロイメント/再起動と発生した問題の解決策 (推奨)

推薦する

Vue で v-if と v-for を一緒に使用することが推奨されない理由の詳細な説明

この記事では主に、v-if と v-for を一緒に使用することが推奨されない理由を紹介します。詳細...

マウスを置いたときに半透明効果のテキスト説明を実現するための純粋な CSS (初心者は必読)

効果は以下のとおりです。 例1 例2:例1[結婚式の計画]を例にとるHTML: <div cl...

Docker+K8S クラスタ環境構築と分散アプリケーション展開

1. Dockerをインストールする yumでdockerをインストール #サービスを開始する sy...

VueコンポーネントライブラリElementUIはテーブルリストのページング効果を実現します

ElementUIはテーブルリストのページング効果のチュートリアルを実装しています。参考までに。具体...

JavaScript の new 演算子を自分で実装する方法

目次コンストラクタ新しいオペレーター自分で新しいものを実装するコンストラクタnew を導入する前に、...

非常に実用的なMySQL関数の包括的な概要、詳細な例の分析チュートリアル

目次1. MySQLの関数の説明2. 単行関数の分類3. キャラクター機能4. 数学関数5. 日付と...

macOS での MySQL 8.0.16 のインストールと設定のグラフィック チュートリアル

この記事では、macOSでのMySQL 8.0.16のインストールと設定のチュートリアルを参考までに...

vue3.0 のウォッチ リスナーの例の詳細な説明

目次序文リスナーと計算プロパティの違いvue3 で watch を使用するにはどうすればいいですか?...

MySQLデータベース入門:データベースバックアップ操作の詳細な説明

目次1. 単一データベースのバックアップ2. 圧縮バックアップ3. マルチデータベースバックアップ4...

MySQL でよく使われる型変換関数の概要 (推奨)

1. Concat関数。よく使用される接続文字列: concat 関数。たとえば、SQLクエリ条件...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

WeChat ミニプログラム 宝くじ番号ジェネレーター

この記事では、WeChatアプレットの宝くじ番号ジェネレータの具体的なコードを参考までに紹介します。...

MySQLのファジークエリのような遅い速度を解決する方法

質問: インデックスは作成されているのに、Like ファジー クエリがまだ遅いのはなぜですか?インデ...

nginx設定ファイルの場所を見つける方法の詳細な説明

よく知らないサーバーの場合や、かなり前にインストールした場所を忘れてしまった場合、構成ファイルの場所...

Docker 経由で wsl の tar ファイルを作成する方法

最近VScodeのリモート開発機能をいじっています。Dockerのコンテナに接続できるほか、WSLに...