É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.

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;

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.