Napisz wolne zapytanie, aby przetestować rejestrowanie powolnego zapytania?

14

Czy istnieje proste zapytanie, które zajęłoby> 2 sekundy, aby móc przetestować powolny rejestrator zapytań?

Szukam czegoś w rodzaju ogólnego stwierdzenia rekurencyjnego lub iteracyjnego.

David LeBauer
źródło

Odpowiedzi:

22

Prostym zapytaniem byłoby:

SELECT SLEEP(2);

Chcesz to powtórzyć?

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)

Alternatywnie, jeśli chcesz tylko przetestować swój slow_query_log, zmień „ long_query_time ” na 0 (aby zarejestrować wszystkie zapytania):

SET long_query_time=0;
Derek Downey
źródło
Na marginesie odpowiednikiem dla SQL Server jestWAITFOR DELAY '00:00:02'
Ben Brocka,
wybierz sen (2) to odpowiedź, której szukałem; Nie mogę sam ustawić long_query_time.
David LeBauer,
Krótki i słodki jest zawsze schludny. Niezła procedura składowana. +1 !!!
RolandoMySQLDBA 12.11.11
SELECT sleep(2)Nie dodaje niczego do powolnego-log - ale SET GLOBAL long_query_time=0dał mi szybkiego wejścia do testu. Dzięki.
Jesper Grann Laursen
0

Oto dość okropne zapytanie. Jest to produkt kartezjański, wykorzystujący łączenie w stylu non-ansi.

use master
select * from sys.objects, sys.indexes
datagod
źródło
schludnie ... Ale nie sądzę, że to mysql.
Derek Downey
ups. Przepraszam. Nie zauważyłem, że to było dla MySQL.
datagod