mysqlで人為的に遅いクエリを作成するにはどうすればよいですか?


15

数週間のうちにプレゼンテーションを行います。このデモの一部は、スロークエリログの使用を含む、基本的なmysqlトラブルシューティング用です。データベースを生成してアプリをインストールしましたが、そのデータベースはクリーンであるため、十分な問題を生成することが困難です。

スロークエリログでクエリを取得するために、次のことを試しました。

遅いクエリ時間を1秒に設定します。

複数のインデックスを削除しました。

システムにストレスをかけた:

stress --cpu 100 --io 100 --vm 2 --vm-bytes 128M --timeout 1m

wgetを使用していくつかの基本的なWebページ呼び出しをスクリプト化しました。

これはどれも遅いクエリを生成していません。データベースに人為的にストレスをかけて問題を生成する別の方法はありますか?複雑なJmeterやその他の負荷ジェネレーターを作成するのに十分なスキルがありません。おそらく、mysqlに組み込まれた何か、またはストレスを超えた別のLinuxトリックを期待しています。


1
+1遅いクエリを取得するよう求めます。実際のケースでそれがこの方法であった場合:D-

回答:


5

mysqlslapをチェックアウトします。Webアプリケーションのクエリの1つを--queryで渡し、-concurrencyで同時クライアントを指定できます。


これは最適に機能しました...これとデータベースのチューニング解除の組み合わせを使用しました。
グレーレース

34

完全に人工的ですが、sleep()関数を使用できます:

select sleep(10);

ログ内:

Time                 Id Command    Argument
# Time: 110629 16:19:13
# User@Host: mysql[mysql] @ localhost []
# Query_time: 10.000218  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1309389553;
select sleep(10);

提案をありがとう...ログが大きくなりますが、アプリの正当なクエリにしたいです。この方法で、デモの説明やその他の診断ツールを使用できます。
グレーレース

:)うーん...たぶん戦略的に機能LOCK TABLESするでしょう。それはあまりにもぎこちないかもしれません。
マークワーグナー

1
通常、*((select * from database)x)を選択すると、ますます再帰的になります。
alexyorke 14年

DO SLEEP(10);クエリでSLEEPの結果が必要ない場合に使用します。
ラスマスフリイスキジェルセン

1

おそらく、データベースのチューニングを解除すると役立つでしょうか?たとえば、key_buffersサイズを小さくしますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.