web-dev-qa-db-fra.com

Écrivez une requête lente pour tester la journalisation de la requête lente?

Existe-t-il une simple requête qui prendrait> 2 secondes afin que je puisse tester le journal de requête lent?

Je cherche quelque chose comme une déclaration de récursif ou itérative générique.

14
David LeBauer

Une simple requête serait:

SELECT SLEEP(2);

Vous voulez le savoir?

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)

Sinon, si vous souhaitez simplement tester votre SLOW_QUERY_LOG, changez ' long_query_time ' à 0 ​​(pour enregistrer toutes les requêtes):

SET long_query_time=0;
22
Derek Downey

Voici une jolie requête horrible. C'est un produit cartésien, utilisant des jointures de style non-ANSI.

use master
select * from sys.objects, sys.indexes
0
datagod