sysbenchツールによるMySQLデータベースのパフォーマンステストの実装方法

sysbenchツールによるMySQLデータベースのパフォーマンステストの実装方法

1. 背景

Sysbench は、システムのハードウェア パフォーマンスをテストできるストレス テスト ツールであり、データベースのベンチマークにも使用できます。 sysbench でサポートされているテストには、CPU コンピューティング パフォーマンス テスト、メモリ割り当ておよび転送速度テスト、ディスク IO パフォーマンス テスト、POSIX スレッド パフォーマンス テスト、相互排他テスト、データベース パフォーマンス テスト (OLTP ベンチマーク テスト) などがあります。現在サポートされているデータベースは、主に MySQL データベースと PG データベースです。

新しいサーバーがオンラインになったときは、サーバーのパフォーマンスをテストすることをお勧めします。潜在的な問題を特定するには、同じタイプの以前のサーバーのパフォーマンス テスト レポートと横に比較するのが最適です。新しいマシンがオンラインになる前に、サーバーの物理的なチェックを行ってください。

データベースの場合、sysbench ツールを使用してデータベース ベンチマークを実装できます。現在のシステムアーキテクチャでは、フロントエンドは水平拡張が比較的容易ですが、データベースは比較的困難であるため、ベンチマークテストはデータベースにとって非常に重要な役割を果たします。データベース ベンチマークの目的は、現在の構成 (ハードウェア構成、OS、データベース設定などを含む) でのデータベースのパフォーマンスを分析し、MySQL のパフォーマンスしきい値を見つけて、実際のシステム要件に応じて構成を調整することです。

2. sysbenchのインストール

1) インストールコマンド

yum -y install sysbench

2) インストールされているバージョンを確認する

sysbench --version

3) インストールされているソフトウェアの情報を表示します(主に rpm コマンドを使用)。

sysbench のインストール情報を照会します。mysql をテストする場合は、テスト用に sysbench に付属する lua スクリプトを使用する必要があります。クイック インストール方法を使用する場合、デフォルトのスクリプト パスは/usr/share/sysbenchです。

このコマンドにない場合は、次のコマンドを実行して、ローカル Linux システムにインストールされているすべての sysbench ソフトウェア プログラムを確認して見つけます。

rpm -qa sysbench

ソフトウェアのすべてのファイルとディレクトリの完全なファイル名を一覧表示します (リスト):

rpm -ql sysbench

3.sysbench構文

sysbench --ヘルプ
使用法:
 sysbench [オプション]... [テスト名] [コマンド]
ほとんどのテストで実装されているコマンド: 準備、実行、クリーンアップ、ヘルプ
一般オプション:
 --threads=N 使用するスレッド数 [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' を使用します) [mysql]
 --db-ps-mode=STRING 準備されたステートメントの使用モード {auto, disabled} [auto]
 --db-debug[=on|off] データベース固有のデバッグ情報を出力します [off]
コンパイルされたデータベース ドライバー:
 MySQL ドライバー
 pgsql - PostgreSQL ドライバ
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 オプション:
 --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 [オプション]... [テスト名] [コマンド]

command は、準備、実行、クリーンアップなど、sysbench によって実行されるコマンドです。 prepare はテスト用のデータを事前に準備すること、run は正式なテストを実行すること、cleanup はテストが完了した後にデータベースをクリーンアップすることです。

testname は実行するテストを指定します。sysbench の古いバージョンでは、--test パラメータを使用してテスト スクリプトを指定できます。新しいバージョンでは、--test パラメータは廃止されました。--test を使用する代わりに、スクリプトを直接指定できます。テストで使用するスクリプトは Lua スクリプトです。sysbench に付属のスクリプトを使用することも、独自のスクリプトを開発することもできます。

MySQL に関するオプションには、主に MySQL 接続情報パラメータと MySQL 実行関連パラメータが含まれます。

4 テスト

ステップ1: ストレステストデータを準備する

sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='textpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 準備

ステップ2: ストレステスト

sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='textpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 実行

テスト結果は、後で分析するためにファイルにエクスポートすることもできます。

 sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='testpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 実行 >> ./mysysbench.log 

ステップ3: ストレステストデータをクリーンアップする

sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='testpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 クリーンアップ

5. 注意事項

(1)事前にテストデータベースを作成し、テストアカウントにデータベースを作成する権限を与える必要があります。

--mysql-db パラメータはテスト データを指定します。デフォルトは sbtest です。

事前に作成されていない場合は、次のエラーメッセージが表示されます。

致命的: `sysbench.cmdline.call_command' 関数が失敗しました: /usr/share/sysbench/oltp_common.lua:83: 接続の作成に失敗しました
(最後のメッセージは3回繰り返されます)
致命的: エラー 1049: 不明なデータベース 'sysbench_db'
致命的: `sysbench.cmdline.call_command' 関数が失敗しました: /usr/share/sysbench/oltp_common.lua:83: 接続の作成に失敗しました
致命的: ホスト 'XXX.XXX.XXX.XXX'、ポート 3306 の MySQL サーバーに接続できません。中止します...
(最後のメッセージは1回繰り返されます)
致命的: エラー 1049: 不明なデータベース 'sysbench_db'
(最後のメッセージは1回繰り返されます)

または(データベースを指定せずに)

致命的: `sysbench.cmdline.call_command' 関数が失敗しました: /usr/share/sysbench/oltp_common.lua:83: 接続の作成に失敗しました
致命的: エラー 1049: 不明なデータベース 'sbtest'
致命的: ホスト 'XXX.XXX.XXX.XXX'、ポート 3306 の MySQL サーバーに接続できません。中止します...

(2) MySQLサーバが動作しているマシンでテストしないでください。一方で、ネットワーク(LANであっても)の影響が反映されない可能性があります。他方、sysbenchの動作(特に同時実行性が高い値に設定されている場合)は、MySQLサーバのパフォーマンスに影響を与えます。

(3)同時クライアント接続数(--threadパラメータ)を徐々に増やし、異なる接続数でのMySQLサーバーのパフォーマンスを観察します。

(4)複数のテストを連続して実行する場合は、前のテストのデータがクリーンアップされていることを確認してください。

(5)生成されたレポートがグラフィカルな分析である場合、gnuplotツールを使用して分析することができます。

要約する

上記は、sysbench ツールを使用して MySQL データベースのパフォーマンス テストを実装するために紹介した方法です。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Sysbench の MySQL ベンチマーク プロセスの分析
  • MySQLデータベースはsysbenchに基づくOLTPベンチマークテストを実装します
  • mysql の sysbench ストレス テストに関する詳細なチュートリアル
  • sysbench を使用して MySQL のパフォーマンスをテストする詳細なチュートリアル
  • sysbench を使用して MySQL のパフォーマンスをテストするチュートリアル
  • MySQL パフォーマンス ストレス ベンチマーク ツール sysbench の使い方の紹介

<<:  WeChatミニプログラムページで値を返す4つの解決策のまとめ

>>:  Linuxでのcrontabの使い方と注意点の詳しい説明

推薦する

プロフェッショナルなMySQL開発設計仕様とSQL記述仕様

チーム開発のプロセスでは、プロジェクトの安定性、コードの効率性、管理の利便性のために、内部開発および...

editplus の Zen コーディング例コードの説明

たとえば、次のように入力します。 XML/HTML コードdiv#ページ>(div#ヘッダー&...

Alibaba Cloud ECS サーバーでポート 8080 を開く方法

セキュリティ上の理由から、Alibaba Cloud Server ECS にはデフォルトで独自のセ...

JavaScript 配列と非配列オブジェクトのディープ クローンとシャロー クローンの原則の詳細な説明

目次シャロークローニングとディープクローニングとは何ですか? 1. アレイのクローンを作成する1.1...

CSS3 弾性拡張ボックスの詳細な説明

使用フレキシブル ボックスはフロントエンドの Web ページ レイアウトで重要な役割を果たしますが、...

MySql ファジークエリ JSON キーワード取得ソリューションの例

目次序文オプション1:オプション2:オプション3:オプション4(最終的に採用されたオプション):要約...

MySQLにおけるACIDトランザクションの実装原理の詳細な説明

導入いつものように、シーンから始めましょう〜インタビュアー:「トランザクションの4つの特性をご存知で...

MySQL で explain ステートメントを使用する基本的なチュートリアル

目次1. 概要1. 説明文テスト2. 結果の各列の説明2. ID列の説明1. 環境整備2. expl...

Ubuntuにopencvをインストールする正しい方法の詳細な説明

この記事ではUbuntuでC++インターフェースを使用してopencvをインストールする方法について...

MySQL でコマンドを使用して階層検索を実現する方法の詳細な説明

序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...

簡単な約束を段階的に実行する方法を教えます

目次ステップ1: フレームワークを構築するステップ2 構築されたPromiseフレームワークに入力す...

Reactのヒントはフックの依存関係の問題を解消する方法を教えます

reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...

MySQLが基礎データ構造としてB+ツリーを使用する理由

MySQL の基盤となるデータ構造が B+ ツリーであることは誰もが知っていますが、ではなぜ赤黒ツリ...

Chrome をクラッシュさせる CSS コードの行

一般的な CSS コードでは、UI レイアウトや互換性に関して軽微な問題が発生するだけです。しかし、...

Docker でコンテナのポート マッピングを動的に変更する方法

前書き: Docker のポート マッピングは、多くの場合、Docker Run コマンド中に -p...