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


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.