Viết một truy vấn chậm để kiểm tra ghi nhật ký truy vấn chậm?


14

Có một truy vấn đơn giản sẽ mất> 2 giây để tôi có thể kiểm tra bộ ghi truy vấn chậm không?

Tôi đang tìm kiếm một cái gì đó giống như một tuyên bố đệ quy chung hoặc lặp đi lặp lại.

Câu trả lời:


22

Một truy vấn đơn giản sẽ là:

SELECT SLEEP(2);

Bạn muốn lặp lại nó?

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)

Ngoài ra, nếu bạn chỉ muốn kiểm tra Slow_query_log của mình, hãy thay đổi ' long_query_time ' thành 0 (để ghi nhật ký tất cả các truy vấn):

SET long_query_time=0;

Là một sidenote tương đương với SQL Server làWAITFOR DELAY '00:00:02'
Ben Brocka

chọn ngủ (2) là câu trả lời mà tôi đang tìm kiếm; Tôi không thể tự đặt long_query_time.
David LeBauer

Ngắn và ngọt ngào luôn gọn gàng. Thủ tục lưu trữ tốt đẹp là tốt. +1 !!!
RolandoMySQLDBA

Việc SELECT sleep(2)không thêm bất cứ điều gì vào nhật ký chậm - nhưng SET GLOBAL long_query_time=0đã cho tôi đầu vào nhanh để kiểm tra. Cảm ơn.
Jesper Grann Laursen

0

Đây là một truy vấn khá khủng khiếp. Nó là một sản phẩm của Cartesian, sử dụng kiểu nối không ansi.

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

gọn gàng ... Nhưng tôi không nghĩ đó là mysql.
Derek Downey

Giáo sư. Lấy làm tiếc. Tôi đã không nhận thấy nó là dành cho MySQL.
datagod
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.