データベースのパフォーマンスを把握することは非常に必要です。この記事では、MySQLベンチマークテストの基本的な概念と、sysbenchを使用してMySQLをベンチマークする詳細な方法を紹介し、KingsoftのシングルバージョンRDSデータベーステストに焦点を当てています。
1.ベンチマークテストの概要1.ベンチマークテスト
とは?
データベースベンチマークテストは、データベースパフォーマンスインジケーターの定量的で再現可能な比較可能なテストです。
ベンチマークとストレステスト
ベンチマークテストは、システムの一種のストレステストとして理解できます。ただし、ベンチマークテストではビジネスロジックは考慮されません。テストはよりシンプルで直接的で、テストが簡単です。データはツールで生成でき、現実性を必要としません。ストレステストでは、通常、ビジネスロジック(ショッピングカートビジネスなど)が考慮され、実際のデータが必要です。
2.ベンチマークテストの役割
ほとんどのWebアプリケーションの場合、システム全体のボトルネックはデータベースです。理由は簡単です。ネットワーク帯域幅、負荷分散ノード、アプリケーションサーバー(CPU、メモリ、ハードディスクライト、接続数など)など、Webアプリケーションの他の要素など)、キャッシュ、水平方向の拡張(一般にplus machineとして知られています)によってパフォーマンスの向上を簡単に実現できます。MySQLの場合、データの整合性の要件により、マシンを追加してデータベースにデータを書き込むというプレッシャーを増やすことは不可能ですが、事前キャッシュ(Redisなど)、読み取りと書き込みの分離、データベースとテーブルの分割によって軽減できますが、システムの他のコンポーネントの水平方向の拡張と比較して、それはあまりにも多くの制限を受けます。
データベースのベンチマークテストの役割は、現在の構成(ハードウェア構成、OS、データベース設定などを含む)でのデータベースのパフォーマンスを分析して、MySQLのパフォーマンスしきい値を見つけ、実際のシステム要件に従って構成を調整することです。
3.ベンチマーク指標
一般的なデータベース指標には次のものがあります。
TPS / QPS:スループットを測定します。(TPS:1秒あたりのトランザクション(TransactionPerSecond)、1秒あたりのクエリレートQPSは、特定のクエリサーバーが指定された時間内に処理するトラフィック量の指標です)
応答時間:平均応答時間、最小応答時間、最大応答が含まれます時間、時間のパーセンテージなど。時間のパーセンテージの参照は、以前の95%のリクエストの最大応答時間など、より重要です。。
同時実行性:同時に処理されたクエリ要求の数。
1
2
3
4.
ベンチマークテストの分類MySQLベンチマークテストには、次の2つのアイデアがあります。
(1)システム全体のベンチマークテスト:ブラウザ、APP、郵便配達員などのテストツールなどのhttp要求によるテスト。このソリューションの利点は、システム全体をより的確にターゲットでき、テスト結果がより正確になることです。欠点は、設計が複雑で実装が難しいことです。
(2)MySQLのみのベンチマークテスト:長所と短所は、システム全体のテストの正反対です。
MySQLに対してベンチマークを行う場合は、通常、mysqlslap、sysbenchなどの特別なツールを使用します。その中でも、sysbenchはmysqlslapよりも用途が広く、より強力で、Innodbに適しています(多くのInnodbのIO特性をシミュレートするため)次に、sysbenchを使用したベンチマークの方法について説明します。
2番目に、デプロイメント環境
最初にクラウドホストを作成します
RDSインスタンスを作成し、クラウドホストをRDSインスタンスに追加する
クラウドホストターミナルでは、次のようにコマンドラインを使用してRDSデータベースに接続できます。
[root @ vm192-168-80-2 sysbench-1.0]#mysql -h 192.168.89.18 -u admin -p
1
3. Sysbench
1.
Sysbenchの概要Sysbenchは、マルチスレッドをサポートし、複数のスレッドをサポートするクロスプラットフォームのベンチマークツールですデータベース。主に次のテストが含まれます。
CPUパフォーマンス
ディスクIOパフォーマンス
スケジューラパフォーマンス
メモリ割り当てと転送速度
POSIXスレッドパフォーマンス
データベースパフォーマンス(OLTPベンチマークテスト)
1
2
3
4
5
6
この記事では、主にデータベースパフォーマンスのテストについて紹介します。
2. Sysbenchのインストール
この記事で使用する環境はCentOS 6.8で、他のLinuxシステムへのインストール方法も同様です。MySQLのバージョンは5.6です。
ダウンロードして解凍
wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"
unzip sysbench-1.0.zip
cd sysbench-1.0
1
2
3
インストールの依存関係
yum install automake libtool –y
1
安装
./autogen.sh
./configure
make
make install
1
2
3
4
インストールは成功しました
sysbench --version
sysbench 1.0.9
1
2
3. sysbench構文
sysbench -helpを実行して、sysbenchの詳細な使用法を確認します。
sysbenchの基本的な構文は次のとおりです。
sysbench [オプション]…[テスト名] [コマンド]
以下に、実際に使用される一般的なパラメーターとコマンドを示します。
(1)コマンド
コマンドは、準備、実行、およびクリーンアップを含む、sysbenchによって実行されるコマンドです。名前が示すとおり、準備は事前にテスト用のデータを準備することであり、実行は正式なテストを実行することであり、クリーンアップはテストの完了後にデータベースをクリーンアップすることです。
(2)テスト名
testnameは、実行するテストを指定します。古いバージョンのsysbenchでは、–testパラメータを使用してテストスクリプトを指定できます。新しいバージョンでは、–testパラメータは廃止と宣言されており、–testを使用せずにスクリプトを直接指定できます。 。
たとえば、次の2つの方法は同じ効果があります。
sysbench --test =。/ tests / include / oltp_legacy / oltp.lua sysbench
./tests/include/oltp_legacy/oltp.lua
1
2
テストで使用されるスクリプトはluaスクリプトです。sysbench独自のスクリプトを使用することも、自分で開発することもできます。ほとんどのアプリケーションでは、sysbenchで提供されるスクリプトを使用するだけで十分です。sysbenchのバージョンによっては、luaスクリプトの場所が異なる場合があります。findコマンドを使用して、sysbenchパスでoltp.luaを検索できます。PS:ほとんどのデータサービスはoltpタイプです。oltpがわからない場合、データサービスはoltpタイプです。
(3)オプション
sysbenchには多くのパラメーターがあり、その中でより一般的に使用されるものには次のものがあります。
MySQL接続情報パラメーター
--mysql-host:MySQLサーバーのホスト名、デフォルトのlocalhost;このマシンでlocalhostを使用してエラーを報告し、MySQLサーバーに接続できないことを確認する場合、マシンのIPアドレスをそれに変更できます。
--mysql-port:MySQLサーバーポート、デフォルト3306
--mysql-user:ユーザー名
--mysql-password:パスワード
1
2
3
4
MySQL実行パラメーター
--oltp-test-mode:simple、nontrx、complexを含む実行モード。デフォルトはcomplexです。シンプルモードでは、シンプルクエリのみがテストされます。nontrxはクエリをテストするだけでなく、更新なども挿入しますが、トランザクションは使用しません。複雑モードテストが最も包括的で、追加、削除、変更をテストし、トランザクションを使用します。必要に応じてテストモードを選択できます。
--oltp-tables-count:テスト済みテーブルの数、実際の状況に応じて選択
--oltp-table-size:テスト済みテーブルのサイズ、実際の状況に応じて選択--threads:クライアントの
同時接続数
--time:テスト実行時間、単位は秒、値は短すぎてはいけません
。120--report-intervalを選択できます。レポートを生成するための時間間隔、単位は秒です。たとえば、10
1
2
3
4
5
6
4、sysbenchの使用例
sysbenchを実行する場合、注意する必要があります:
(1)MySQLサーバーが実行されているマシンではテストしないでください。一方で、ネットワーク(ローカルエリアネットワークでも)の影響を反映していない可能性があります。他方、sysbenchの操作(特に同時設定数が多い場合)は、MySQLに影響します。サーバーのパフォーマンス。
(2)クライアント側の同時接続数(–threadパラメータ)を徐々に増やし、接続数が異なる場合のMySQLサーバーのパフォーマンスを観察できます(それぞれ10、20、50、100などに設定した場合)。
(3)一般実行モードは複合として選択できます。サーバーの読み取り専用パフォーマンス、またはトランザクションを使用しない場合のパフォーマンスを具体的にテストする必要がある場合は、シンプルモードまたは非trxモードを選択できます。
(4)複数のテストを続けて行う場合は、前のテストデータがクリーンアップされていることを確認してください。
以下は、sysbenchで使用される例です。
(1)データを準備する
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host = 192.168.89.18 --mysql-port = 3306 --mysql-user = admin --mysql-password = Aa123456 --oltp-test-mode =複雑な--oltp-tables-count = 10 --oltp-table-size = 100000 --threads = 10 --time = 120 --report-interval = 10 prepare
1
10個のテーブルが使用され、各テーブルには100,000データがあり、クライアントの同時スレッド数は10、実行時間は120秒、レポートは10秒ごとに生成されます。
(2)テストを実行する
後で分析するために、テスト結果をファイルにエクスポートします。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host = 192.168.89.18 --mysql-port = 3306 --mysql-user = admin --mysql-password = Aa123456 --oltp-test-mode =複雑な--oltp-tables-count = 10 --oltp-table-size = 100000 --threads = 10 --time = 120 --report-interval = 10 run >> /root/test/mysysbench.log
1
(3 )清理データ
テストを実行した後、データをクリーンアップします。そうしないと、後続のテストが影響を受けます。
[root @ vm192-168-80-2 sysbench-1.0]#sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host = 192.168.89.18 --mysql-port = 3306 --mysql-user = admin --mysql-password = Aa123456クリーンアップ
sysbench 1.0.14(バンドルされたLuaJIT 2.1.0-beta2を使用)
テーブル 'sbtest1'を削除しています...
1
2
3
4
5.テスト結果テスト後、
次のように出力ファイルを確認します。
sysbench 1.0.14(バンドルされたLuaJIT 2.1.0-beta2を使用)
次のオプションでテストを実行:
スレッド数:10
10秒ごとに中間結果を報告
現在の時刻から乱数ジェネレーターを初期化
ワーカースレッドを初期化しています...
-スレッド開始スレッド開始!
-10秒ごとのテスト結果、tps、1秒あたりの読み取り数、1秒あたりの書き込み数、99%を超える応答時間統計
[10s]をレポートします。thds:10 tps:956.45 qps:19139.38(r / w / o:13399.56 / 3825.92 /1913.91)緯度(ミリ秒、95%):29.72エラー/秒:0.00再計算/秒:0.00
[20秒] thds:10 tps:989.71 qps:19804.24(r / w / o:13862.17 / 3962.55 / 1979.52)緯度(ms 、95%):28.67エラー/秒:0.10再計算/秒:0.00
[30秒] thds:10 tps:995.44 qps:19909.03(r / w / o:13936.11 / 3982.05 / 1990.87)lat(ms、95%):27.66エラー/ s:0.00再計算/ s:0.00
[40 秒] thds:10 tps:983.30 qps:19660.90(r / w / o:13764.23 / 3930.08 / 1966.59)lat(ms、95%):27.66 err / s:0.00 reconn / s:0.00
[50s] thds:10 tps:994.20 qps:19882.58(r / w / o:13918.26 / 3975.92 / 1988.41)lat(ms、95%):29.19 err / s:0.00 reconn / s:0.00
[60秒] thds:10 tps:982.50 qps:19648.18(r / w / o:13752.56 / 3930.82 / 1964.81)lat(ms、95%):28.16 err / s:0.00 reconn / s:0.00
[70s] thds:10 tps:981.10 qps:19624.20(r / w / o:13737.80 / 3924.00 / 1962.40)lat(ms、95%):29.19 err / s:0.00 reconn / s:0.00
[80s] thds:10 tps:991.69 qps:19837.87 (r / w / o:13885.81 / 3968.67 / 1983.39)lat(ms、95%):27.17 err / s:0.00 reconn / s:0.00
[90s] thds:10 tps:1007.34 qps:20142.36(r / w / o :14100.50 / 4027.27 / 2014.59)lat(ms、95%):26.68 err / s:0.00 reconn / s:0.00
[100s] thds:10 tps:1009.76 qps:20195.17(r / w / o:14135.79 / 4039.75 / 2019.63 )lat(ms、95%):26.20 err / s:0.00 reconn / s:0.00
[110s] thds:10 tps:1003.80 qps:20077.42(r / w / o:14053.54 / 4016.28 / 2007.59)lat(ms、95 %):25.74 err / s:0.00 reconn / s:0.00
[120秒] thds:10 tps:984.30 qps:19685.77(r / w / o:13781.75 / 3935.41 / 1968.61)lat(ms、95%):28.67 err / s:0.00 reconn / s:0.00
SQL統計:
実行されたクエリ:
読み取り:1663326-読み取りの合計数
書き込み:475233-
その他の書き込みの合計数 :237617-その他の操作(SELECT、INSERT、UPDATE、DELETE以外のCOMMITなどの操作)の
合計:2376176-合計
トランザクション数:118808( 989.85 /秒)-合計トランザクション(トランザクション/秒)
クエリ:2376176(19797.13 /秒)無視された
エラー:1(0.01 /秒)-合計無視されたエラーの合計(1秒あたりのエラー数)
再接続:0(1秒あたり0.00)-再接続の総数(1秒あたりの再接続数)
一般統計:
- 一般統計合計時間:120.0244秒-
合計イベント数:118808-発生したトランザクション数
レイテンシ(ミリ秒):
最小 :6.08- 最小の時間のかかる
平均
:10.10- 平均の時間のかかる最大:87.65-最も長い時間のかかる
95パーセンタイル:28.16-95%を超える平均の時間のかかる
合計:1199522.76
スレッドの公平性:-
同時統計イベント(avg / stddev):11880.8000 / 273.15-処理イベントの総数/標準偏差
実行時間(avg / stddev):119.9523 / 0.00-合計実行時間/標準偏差
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
これらのうち、私たちにとってより重要な情報は次のとおりです。
クエリ:クエリとqpsの総数
トランザクション:トランザクションとtpsの総数
レイテンシ-95パーセンタイル:リクエストの最初の95%の最大応答時間、この場合は28.16ミリ秒。
mysql接続の数を表示する
6.推奨事項
sysbenchの使用に関するいくつかの提案を以下に示します。
1.テストを開始する前に、システム全体のベンチマークテストを使用するか、MySQLのベンチマークテストを使用するか、またはその両方を使用するかを明確にする必要があります。
2. MySQLのベンチマークテストが必要な場合は、精度要件も明確にする必要があります。本番環境の実際のデータを使用する必要があるか、ツールを使用して生成する必要があるか、前者は実装が面倒です。実際のデータを使用する場合は、一部のデータではなくすべてのデータを使用してください。
3.ベンチマークテストは、意味をなすために複数回実行する必要があります。
4.テスト中は、マスタースレーブ同期の状態に注意してください。
5.テストでは、マルチスレッドの状況をシミュレートする必要があります。シングルスレッドの状況では、実際の効率をシミュレートできるだけでなく、ブロッキングやデッドロックの状況をシミュレートすることもできません。
参考資料:https ://www.cnblogs.com/kismetv/archive/2017/09/30/7615738.html
————————————————
Copyright Notice:この記事はCSDNのブロガーです「3本のタバコ」の元の記事は、CC 4.0 BY-SAの著作権契約に従います。転載するには、元のソースリンクとこの声明を添付してください。
元のリンク:https://blog.csdn.net/qq_36357820/article/details/80079012