Wie kann eine langsame Abfrage in MySQL künstlich erstellt werden?

15

Ich werde in ein paar Wochen eine Präsentation geben. Ein Teil dieser Demo ist für die grundlegende Fehlersuche in MySQL gedacht, einschließlich der Verwendung des langsamen Abfrageprotokolls. Ich habe eine Datenbank generiert und unsere App installiert, aber es ist eine saubere Datenbank und daher schwierig, genug Probleme zu generieren.

Ich habe Folgendes versucht, um Abfragen im langsamen Abfrageprotokoll abzurufen:

Setzen Sie die langsame Abfragezeit auf 1 Sekunde.

Mehrere Indizes gelöscht.

Betonte das System:

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

Skript für einige grundlegende Webseitenaufrufe mit wget.

Nichts davon hat zu langsamen Abfragen geführt. Gibt es eine andere Möglichkeit, die Datenbank künstlich zu belasten, um Probleme zu generieren? Ich habe nicht genug Fähigkeiten, um ein komplexes Jmeter oder einen anderen Lastgenerator zu schreiben. Ich hoffe vielleicht auf etwas, das in MySQL eingebaut ist, oder einen anderen Linux-Trick, der über Stress hinausgeht.

Graue Rasse
quelle
1
+1 Für die Bitte, langsame Antworten zu bekommen. Wenn es nur in echten Fällen so wäre: D
red

Antworten:

5

Kasse mysqlslap . Sie können eine der Abfragen Ihrer Webanwendung mit --query übergeben und gleichzeitig Clients mit --concurrency angeben.

HTTP500
quelle
Dies funktionierte am besten ... mit dieser und einer Kombination aus Datenbank-De-Tuning.
Gray Race
34

Völlig künstlich, aber Sie können die sleep()Funktion verwenden:

select sleep(10);

Im Protokoll:

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);
Mark Wagner
quelle
Vielen Dank für den Vorschlag ... Das Protokoll wird zwar größer, aber ich möchte, dass sie legitime Abfragen für die App sind. Auf diese Weise kann ich Demo-Erklärungen und andere Diagnosewerkzeuge erstellen.
Gray Race
:) Hmm ... vielleicht LOCK TABLESfunktioniert eine strategische . Das kann auch zu klobig sein.
Mark Wagner
1
Normalerweise wähle * aus ((wähle * aus der Datenbank) x) und werde immer rekrutierter, macht den Trick für mich.
Alexyorke
Verwenden DO SLEEP(10);Sie diese Option, wenn das Ergebnis von SLEEP nicht in Ihrer Abfrage enthalten sein soll.
Rasmus Friis Kjeldsen
1

Vielleicht hilft es, die Datenbank zu optimieren? Zum Beispiel die Größe von key_buffers reduzieren?

Agy
quelle