Escreva uma consulta lenta para testar o log de consultas lento?

14

Existe uma consulta simples que levaria> 2 segundos para que eu possa testar o log de consultas lentas?

Estou procurando algo como uma declaração recursiva ou iterativa genérica.

David LeBauer
fonte

Respostas:

22

Uma consulta simples seria:

SELECT SLEEP(2);

Deseja iterar?

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)

Como alternativa, se você quiser apenas testar seu slow_query_log, altere ' long_query_time ' para 0 (para registrar todas as consultas):

SET long_query_time=0;
Derek Downey
fonte
Como nota de rodapé, o equivalente ao SQL Server éWAITFOR DELAY '00:00:02'
Ben Brocka 11/11
selecione sono (2) é a resposta que eu estava procurando; Eu não posso definir long_query_time eu mesmo.
David LeBauer 11/11/11
Curto e doce é sempre elegante. Bom procedimento armazenado também. +1 !!!
RolandoMySQLDBA
Eles SELECT sleep(2)não adicionaram nada ao log lento - mas SET GLOBAL long_query_time=0me deram uma entrada rápida para testar. Obrigado.
Jesper Grann Laursen
0

Aqui está uma consulta bastante horrível. É um produto cartesiano, usando junção no estilo não-ansi.

use master
select * from sys.objects, sys.indexes
datagod
fonte
puro ... Mas não acho que seja mysql.
Derek Downey
oops. Desculpe. Eu não percebi que era para o MySQL.
Datagod #