编写慢查询以测试慢查询日志记录?


14

是否有一个简单的查询需要2秒钟以上的时间,以便我可以测试慢速查询记录器?

我正在寻找类似通用递归或迭代语句的东西。

Answers:


22

一个简单的查询将是:

SELECT SLEEP(2);

您要迭代吗?

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)

或者,如果您只想测试slow_query_log,请将' long_query_time ' 更改为0(以记录所有查询):

SET long_query_time=0;

作为旁注,SQL Server的等效项是WAITFOR DELAY '00:00:02'
— Ben Brocka

选择sleep(2)是我一直在寻找的答案;我自己无法设置long_query_time。
— David LeBauer 2011年

简短而甜蜜总是整洁的。尼斯存储过程。+1 !!!
— RolandoMySQLDBA 2011年

在SELECT sleep(2)没有添加任何慢日志-但SET GLOBAL long_query_time=0给了我快速输入测试。谢谢。
— Jesper Grann Laursen 2014年

0

这是一个非常可怕的查询。它是笛卡尔积,使用非ansi样式联接。

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

整齐...但是我不认为这是mysql。
— 德里克·唐尼

哎呀 抱歉。我没有注意到这是针对MySQL的。
— datagod 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.