Écrire une requête lente pour tester la journalisation des requêtes lentes?

14

Existe-t-il une requête simple qui prendrait plus de 2 secondes pour que je puisse tester l'enregistreur de requêtes lent?

Je recherche quelque chose comme une déclaration générique récursive ou itérative.

David LeBauer
la source

Réponses:

22

Une requête simple serait:

SELECT SLEEP(2);

Vous voulez l'itérer?

DELIMITER $$
DROP FUNCTION IF EXISTS `iterateSleep` $$
CREATE FUNCTION `iterateSleep` (iterations INT)
RETURNS INT DETERMINISTIC
BEGIN
    DECLARE remainder INT;

    SET remainder = iterations;

    read_loop: LOOP     
        IF remainder=0 THEN
            LEAVE read_loop;
        END IF;

        SELECT SLEEP(2) INTO @test;
        SET remainder = remainder - 1;          
    END LOOP;

    RETURN iterations;
END $$
DELIMITER ;

-- TO TEST IT OUT
mysql> SELECT iterateSleep(2);
+-----------------+
| iterateSleep(2) |
+-----------------+
|               2 |
+-----------------+
1 row in set (4.01 sec)

Alternativement, si vous souhaitez simplement tester votre slow_query_log, remplacez ' long_query_time ' par 0 (pour enregistrer toutes les requêtes):

SET long_query_time=0;
Derek Downey
la source
En tant que sidenote, l'équivalent pour SQL Server estWAITFOR DELAY '00:00:02'
Ben Brocka
sélectionner sleep (2) est la réponse que je cherchais; Je ne peux pas définir moi-même long_query_time.
David LeBauer
Court et doux est toujours net. Belle procédure stockée également. +1 !!!
RolandoMySQLDBA
Le SELECT sleep(2)n'a pas ajouté quoi que ce soit au journal lent - mais le SET GLOBAL long_query_time=0m'a donné une entrée rapide pour tester. Merci.
Jesper Grann Laursen
0

Voici une requête assez horrible. C'est un produit cartésien, utilisant une jointure de style non-ansi.

use master
select * from sys.objects, sys.indexes
datagod
la source
soigné ... Mais je ne pense pas que ce soit mysql.
Derek Downey
Oups. Pardon. Je n'ai pas remarqué que c'était pour MySQL.
datagod