Eine langsame Abfrage schreiben, um die Protokollierung langsamer Abfragen zu testen?

14

Gibt es eine einfache Abfrage, die> 2 Sekunden dauern würde, damit ich den Slow Query Logger testen kann?

Ich suche so etwas wie eine generische rekursive oder iterative Aussage.

David LeBauer
quelle

Antworten:

22

Eine einfache Abfrage wäre:

SELECT SLEEP(2);

Sie möchten es wiederholen?

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)

Wenn Sie alternativ nur Ihr slow_query_log testen möchten, ändern Sie ' long_query_time ' in 0 (um alle Abfragen zu protokollieren):

SET long_query_time=0;
Derek Downey
quelle
Als Randnotiz für SQL Server giltWAITFOR DELAY '00:00:02'
Ben Brocka
wähle Schlaf (2) ist die Antwort, nach der ich gesucht habe; Ich kann nicht long_query_time selbst einstellen.
David LeBauer
Kurz und süß ist immer ordentlich. Schöne gespeicherte Prozedur. +1 !!!
RolandoMySQLDBA
Das SELECT sleep(2)hat nichts mit dem Slow-Log hinzufügen - aber das SET GLOBAL long_query_time=0gab mir eine schnelle Eingabe zu testen. Vielen Dank.
Jesper Grann Laursen
0

Hier ist eine ziemlich schreckliche Frage. Es ist ein kartesisches Produkt, bei dem keine Ansi-Verknüpfungen verwendet werden.

use master
select * from sys.objects, sys.indexes
datagod
quelle
ordentlich ... Aber ich glaube nicht, dass das MySQL ist.
Derek Downey
Hoppla. Es tut uns leid. Ich habe nicht bemerkt, dass es für MySQL war.
Datum