Đo thời gian truy vấn MySQL thực tế


79

Làm cách nào để tôi có thể đo thời gian thực thi của một truy vấn mà không đo thời gian nó dành cho việc chờ giải phóng khóa, v.v.? Ý tưởng duy nhất của tôi là liên tục đo lường cùng một truy vấn và ghi lại thời gian nhanh nhất.

Câu trả lời:


149

Bắt đầu trình biên dịch bằng

SET profiling = 1;

Sau đó thực hiện Truy vấn của bạn.

Với

SHOW PROFILES;

bạn sẽ thấy danh sách các truy vấn mà trình biên dịch có thống kê. Và cuối cùng, bạn chọn truy vấn để kiểm tra

SHOW PROFILE FOR QUERY 1;

hoặc bất kỳ số nào mà truy vấn của bạn có.

Những gì bạn nhận được là một danh sách trong đó chính xác lượng thời gian đã được sử dụng trong quá trình truy vấn.

Thông tin thêm trong sách hướng dẫn.


Thật tuyệt vời! Không biết cái này có chậm không? tức là tôi có thể thêm điều này vào lớp trình bao bọc của mình, để thực thi cho mọi truy vấn chạy trên trang web của tôi không?
Mikhail

3
Không bao giờ nghĩ về điều đó. Tại sao bạn muốn làm điều đó? Thông thường điều này chỉ là để phát triển, tôi đoán. Nếu bạn muốn biết truy vấn nào chậm, hãy xem trong nhật ký truy vấn chậm của bạn. dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
favouritePants,

Bởi vì các truy vấn mất khoảng thời gian khác nhau cho những người dùng khác nhau. chậm-query-log dường như để đếm thời gian chờ đợi một phiên bản lock
Mikhail

1
Không thực sự đúng. Chờ khóa cũng chỉ là một symtom cho một truy vấn khác bị chậm. Tôi đề nghị, hãy chọn các truy vấn trong nhật ký truy vấn chậm của bạn, chạy chúng với trình biên dịch để xem chúng đã dành nhiều thời gian ở đâu. Sau đó, nếu có thể, hãy cải thiện chúng. Thêm chỉ mục cho phù hợp, viết lại chúng hoặc giảm dữ liệu đọc nếu truy vấn dành nhiều thời gian sending data. Hoặc bất cứ điều gì cần thiết để cải thiện hiệu suất. Tôi thấy chẳng ích gì khi cho người dùng biết, tại sao họ phải đợi lâu như vậy. Thực ra họ không quan tâm.
ưa thích Pants

Tôi không có ý muốn hiển thị kết quả của hồ sơ cho người dùng. Tôi chỉ muốn chụp nó sống và lưu trữ cho mục đích riêng của tôi
Mikhail

37

Câu trả lời được chấp nhận đang trở nên không hợp lệ ...

SHOW PROFILE[S]không được dùng nữa kể từ MySQL 5.6.7 và sẽ bị xóa trong bản phát hành MySQL trong tương lai. Sử dụng Lược đồ hiệu suất thay thế; xem http://dev.mysql.com/doc/refman/5.6/en/performance-schema-query-profiling.html


2
Nếu Hồ sơ cung cấp cho bạn bất cứ điều gì hữu ích hơn là "gửi dữ liệu", bạn đã thắng xổ số.
Rick James

1
Tôi đang sử dụng 5.7.19 và vẫn show profileslàm việc đúng
Siva Praveen

1
@SivaPraveen - OK, hiện tại nó vẫn hoạt động, nhưng "... sẽ bị xóa ..."
Rick James
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.