Comment créer artificiellement une requête lente dans mysql?

15

Je donne une présentation pratique dans quelques semaines. Une partie de cette démo concerne le dépannage de base de mysql, y compris l'utilisation du journal des requêtes lentes. J'ai généré une base de données et installé notre application, mais c'est une base de données propre et donc difficile de générer suffisamment de problèmes.

J'ai essayé ce qui suit pour obtenir des requêtes dans le journal des requêtes lentes:

Définissez le temps de requête lent sur 1 seconde.

Plusieurs index supprimés.

A souligné le système:

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

Scripté quelques appels de page Web de base en utilisant wget.

Rien de tout cela n'a généré de requêtes lentes. Existe-t-il un autre moyen de solliciter artificiellement la base de données pour générer des problèmes? Je n'ai pas assez de compétences pour écrire un Jmeter complexe ou un autre générateur de charge. J'espère peut-être quelque chose de intégré à mysql ou une autre astuce Linux au-delà du stress.

Course grise
la source
1
+1 Pour avoir demandé à obtenir des requêtes lentes. Si seulement c'était ainsi dans les cas réels: D
rouge

Réponses:

5

Commander mysqlslap . Vous pouvez transmettre l'une des requêtes de votre application Web avec --query et spécifier des clients simultanés avec --concurrency.

HTTP500
la source
Cela a fonctionné le mieux ... en utilisant cela et une combinaison de désaccordage de la base de données.
Gray Race
34

Totalement artificiel mais vous pouvez utiliser la sleep()fonction:

select sleep(10);

Dans le journal:

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
la source
Merci pour la suggestion ... Cela augmente le journal, mais j'aimerais qu'il s'agisse de requêtes légitimes pour l'application. De cette façon, je peux expliquer la démonstration et d'autres outils de diagnostic.
Gray Race
:) Hmm ... peut-être qu'une stratégie LOCK TABLESfonctionnera. Cela peut aussi être trop compliqué.
Mark Wagner
1
Habituellement, sélectionnez * dans ((sélectionnez * dans la base de données) x) et continuer à devenir de plus en plus récréatif fait l'affaire pour moi.
alexyorke le
A utiliser DO SLEEP(10);si vous ne voulez pas que le résultat de SLEEP soit dans votre requête.
Rasmus Friis Kjeldsen
1

Peut-être que le réglage de la base de données pourrait être utile? Par exemple, réduire la taille de key_buffers?

agy
la source