web-dev-qa-db-ja.com

カスタムSQL負荷テスト用のツール

いくつかの構成でmysqlアプリケーションを比較するためにいくつかのテストを実行したいと思います。しかし、sysbenchやoltpテストのようなものは使いたくありません。なぜなら、いくつかの重いストアドプロシージャロジックがあるからです。だから...私は私たちの手順に対してテストしたいと思います。

カスタムクエリを(オプションとして-並行して)実行し、統計を表示するために使用できるテストアプリケーション/フレームワークはありますか? Siege for webのようなものですか?私がすでに見つけたものは、通常、独自に生成されたデータベーススキーマとシナリオを使用します。

開発者にカスタムJavaインターフェイスを作成してSiegeを使用するように依頼することができます。ボットは、オーバーヘッドを追加したり、数値に影響を与えたりしたくありません。

よろしく、イゴール。

4
Shebnik

Jmeterは、JDBCを使用してデータベース負荷テストを実行できます。 http://jakarta.Apache.org/jmeter/usermanual/build-db-test-plan.html

私はこれまでjdbc機能を使用したことがないので、複雑なクエリを処理できるかどうかわかりません。

3
Michael Marano

私は好きです:

  1. PHP/Python/Perlスクリプトを記述してデータベースにアクセスし、テストを実行して結果をXML形式で出力します
  2. HTTPベンチマークツール(httperfなど)を使用してデータベースにログを記録し、結果の出力を保存します
  3. 失敗を解析し、繰り返します。
0
Aiden Bell

ほとんどのユニットテストエンジンの一般原則に従って、単純なmySQLユニットテストエンジンを構築できます。

過去にMSSQL用にこのようなものを構築しました

アイデアは次のとおりでした

1)ユニットテスト手順を記述し、「test_」のように同じ名前のプレフィックスを付けます。 MS SQLでは、メタ情報として拡張プロパティを使用して、アウトテストの特定のパラメーターを記述しました(NUnitと同じように、異なるテスト属性を使用できます)

2)カーソルを開き、カタログから「test_」で始まるすべてのプロシージャ名を選択し、EXEC(@procedure_name)ステートメントでそれぞれを実行するプロシージャ/スクリプトを記述します。テストが失敗した場合、テスト手順でエラーが発生するはずです。

3)テスト実行の結果はテーブルに保存されます。

4)同じデータに対してテストを実行し、予測可能な結果を​​取得するために、1回バックアップし、各テストの実行前にバックアップから復元したサンプルテストデータベースがあります。

0
Bogdan_Ch

最終的に [〜#〜] sqlio [〜#〜] を使用してディスクに負荷をかけ、カスタムクエリを記述してかなりの量のデータを生成し、大きなテーブルでさまざまな計算を行ってシミュレーションしました。負荷が高いが、最適化が不十分なデータベース。次に、同時接続の数を、それがなくなるまで増やしました。

0
GardenMWM

MySQL 5.1にパッケージ化されたツールが必要な場合は、試してみるよりも悪い結果になる可能性があります MySQL Slap(別名mysqlslap) 。ドキュメントから直接の例:

独自のcreateおよびquerySQLステートメントを提供し、それぞれに50のクライアントがクエリを実行して200の選択を行います。

mysqlslap --delimiter=";" \  
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" \  
--query="SELECT * FROM a" --concurrency=50 --iterations=200

これにより、テストを並行して実行するオプションが提供されます。ただし、複数のクライアントを使用した並列処理の実装は、好みに合わない場合があります。ここに簡単な説明があります(繰り返しますが、逐語的に):

mysqlslapは次の3つの段階で実行されます。

  1. スキーマ、テーブル、およびオプションで、テストに使用するストアドプログラムまたはデータを作成します。この段階では、単一のクライアント接続を使用します。

  2. 負荷テストを実行します。この段階では、多くのクライアント接続を使用できます。

  3. クリーンアップします(切断し、指定されている場合はテーブルを削除します)。この段階では、単一のクライアント接続を使用します。

これがあなたの好みに合わない場合は、cronスクリプトを使用して、多くのユーザーに対して特定の時間にMySQL Slapをトリガーするか、サーバーなどへのネットワークパスが同じである同じ構成/仕様のマシンに対して行うことができます(後者はベンチマークは、不明瞭な結論を防ぐために考えられる不一致を排除する必要があるため、非常に重要です)。

(おそらく)以前のMySQLバージョンを実行している場合、 このリンク は5.0用の5.1ソースをコンパイルする方法に関する有用な情報を提供します。それ以上のバックポートはおそらく不可能です。

これが基本的なウォークスルーです。

0
Andy