Scrivere una query lenta per testare la registrazione delle query lente?


14

Esiste una query semplice che richiederebbe> 2 secondi per poter testare il logger di query lento?

Sto cercando qualcosa come una dichiarazione generica ricorsiva o iterativa.

Risposte:


22

Una semplice query sarebbe:

SELECT SLEEP(2);

Vuoi iterarlo?

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)

In alternativa, se desideri solo testare slow_query_log, modifica " long_query_time " su 0 (per registrare tutte le query):

SET long_query_time=0;

Come sidenote l'equivalente di SQL Server èWAITFOR DELAY '00:00:02'
Ben Brocka,

seleziona sleep (2) è la risposta che stavo cercando; Non posso impostare da solo long_query_time.
David LeBauer,

Breve e dolce è sempre pulito. Anche bella procedura memorizzata. +1 !!!
RolandoMySQLDBA,

Il SELECT sleep(2)non ha aggiunto nulla al registro lento, ma SET GLOBAL long_query_time=0mi ha dato un rapido input da testare. Grazie.
Jesper Grann Laursen,

0

Ecco una domanda piuttosto orribile. È un prodotto cartesiano che utilizza un join di stile non ansi.

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

pulito ... Ma non penso che sia mysql.
Derek Downey,

oops. Scusa. Non ho notato che era per MySQL.
datagod
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.