¿Escribir una consulta lenta para probar el registro lento de consultas?

14

¿Hay una consulta simple que tomaría> 2 segundos para que pueda probar el registrador de consultas lento?

Estoy buscando algo como una declaración recursiva o iterativa genérica.

David LeBauer
fuente

Respuestas:

22

Una consulta simple sería:

SELECT SLEEP(2);

¿Quieres repetirlo?

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)

Alternativamente, si solo desea probar su slow_query_log, cambie ' long_query_time ' a 0 (para registrar todas las consultas):

SET long_query_time=0;
Derek Downey
fuente
Como nota al margen, el equivalente para SQL Server esWAITFOR DELAY '00:00:02'
Ben Brocka
seleccione dormir (2) es la respuesta que estaba buscando; No puedo configurar long_query_time yo mismo.
David LeBauer
Corto y dulce siempre está limpio. Buen procedimiento almacenado también. +1 !!!
RolandoMySQLDBA
El SELECT sleep(2)no añade nada a la lenta-registro - pero el SET GLOBAL long_query_time=0me dio de entrada rápida a prueba. Gracias.
Jesper Grann Laursen
0

Aquí hay una consulta bastante horrible. Es un producto cartesiano, que utiliza un estilo de unión no ansi.

use master
select * from sys.objects, sys.indexes
datagod
fuente
ordenado ... Pero no creo que sea mysql.
Derek Downey
¡Uy! Lo siento. No me di cuenta de que era para MySQL.
datagod