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.