Hướng dẫn mysqldumpslow - mysqldumpslow

The slow query log consists of SQL statements that take more than long_query_time seconds to execute and require at least min_examined_row_limit rows to be examined. The slow query log can be used to find queries that take a long time to execute and are therefore candidates for optimization. However, examining a long slow query log can be a time-consuming task. To make this easier, you can use the mysqldumpslow command to process a slow query log file and summarize its contents. See Section 4.6.10, “mysqldumpslow — Summarize Slow Query Log Files”.

Thời gian để có được các khóa ban đầu không được tính là thời gian thực hiện. MySQLD viết một tuyên bố cho nhật ký truy vấn chậm sau khi nó được thực thi và sau khi tất cả các khóa đã được phát hành, vì vậy thứ tự nhật ký có thể khác với thứ tự thực hiện.mysqld writes a statement to the slow query log after it has been executed and after all locks have been released, so log order might differ from execution order.

Tham số nhật ký truy vấn chậm

Các giá trị tối thiểu và mặc định của long_query_time lần lượt là 0 và 10. Giá trị có thể được chỉ định cho độ phân giải của micro giây.

Theo mặc định, các câu lệnh quản trị không được ghi lại, cũng không phải là các truy vấn không sử dụng các chỉ mục để tra cứu. Hành vi này có thể được thay đổi bằng cách sử dụng log_slow_admin_statementslog_queries_not_using_indexes, như được mô tả sau.

Theo mặc định, nhật ký truy vấn chậm bị vô hiệu hóa. Để chỉ định trạng thái nhật ký truy vấn chậm ban đầu một cách rõ ràng, hãy sử dụng --slow_query_log[={0|1}]. Không có đối số hoặc đối số là 1, --slow_query_log cho phép nhật ký. Với đối số 0, tùy chọn này vô hiệu hóa nhật ký. Để chỉ định tên tệp nhật ký, sử dụng --slow_query_log_file=file_name. Để chỉ định đích nhật ký, hãy sử dụng biến hệ thống log_output (như được mô tả trong Phần & NBSP; 5.4.1, Lựa chọn nhật ký truy vấn chung và các điểm đầu ra nhật ký truy vấn chậm).

Nếu bạn chỉ định không có tên cho tệp nhật ký truy vấn chậm, tên mặc định là ________ 9-slow.log. Máy chủ tạo tệp trong thư mục dữ liệu trừ khi tên đường dẫn tuyệt đối được đặt để chỉ định một thư mục khác.

Để vô hiệu hóa hoặc bật nhật ký truy vấn chậm hoặc thay đổi tên tệp nhật ký khi chạy, hãy sử dụng các biến hệ thống toàn cầu ____10 và min_examined_row_limit1. Đặt min_examined_row_limit0 thành 0 để vô hiệu hóa nhật ký hoặc thành 1 để bật nó. Đặt min_examined_row_limit1 để chỉ định tên của tệp nhật ký. Nếu một tệp nhật ký đã được mở, nó sẽ được đóng và tệp mới được mở.

Máy chủ ghi ít thông tin hơn vào nhật ký truy vấn chậm nếu bạn sử dụng tùy chọn min_examined_row_limit4.

Để bao gồm các câu lệnh quản trị chậm trong nhật ký truy vấn chậm, bật biến hệ thống log_slow_admin_statements. Các tuyên bố hành chính bao gồm min_examined_row_limit6, min_examined_row_limit7, min_examined_row_limit8, min_examined_row_limit9, long_query_time0, long_query_time1 và long_query_time2.

Để bao gồm các truy vấn không sử dụng các chỉ mục để tra cứu hàng trong các câu lệnh được ghi vào nhật ký truy vấn chậm, bật biến hệ thống log_queries_not_using_indexes. .

Khi các truy vấn không sử dụng chỉ mục được ghi lại, nhật ký truy vấn chậm có thể phát triển nhanh chóng. Có thể đặt giới hạn tỷ lệ cho các truy vấn này bằng cách đặt biến hệ thống long_query_time4. Theo mặc định, biến này là 0, có nghĩa là không có giới hạn. Các giá trị dương áp đặt giới hạn mỗi phút đối với việc ghi nhật ký các truy vấn không sử dụng các chỉ mục. Truy vấn đầu tiên như vậy mở một cửa sổ 60 giây trong đó máy chủ ghi nhật ký truy vấn đến giới hạn đã cho, sau đó triệt tiêu các truy vấn bổ sung. Nếu có các truy vấn bị triệt tiêu khi cửa sổ kết thúc, máy chủ sẽ ghi lại một bản tóm tắt cho biết số lượng có và thời gian tổng hợp dành cho chúng. Cửa sổ 60 giây tiếp theo bắt đầu khi máy chủ đăng nhập truy vấn tiếp theo không sử dụng chỉ mục.

Máy chủ sử dụng các tham số kiểm soát theo thứ tự sau để xác định xem có nên ghi truy vấn vào nhật ký truy vấn chậm hay không:

  1. Truy vấn phải không phải là một tuyên bố quản trị hoặc log_slow_admin_statements phải được bật.

  2. Truy vấn phải mất ít nhất long_query_time giây hoặc log_queries_not_using_indexes phải được bật và truy vấn không sử dụng chỉ mục để tra cứu hàng.

  3. Truy vấn phải đã kiểm tra ít nhất min_examined_row_limit hàng.

  4. Truy vấn không được đàn áp theo cài đặt long_query_time4.

Biến hệ thống log_slow_admin_statements0 kiểm soát múi giờ của dấu thời gian trong các tin nhắn được ghi vào tệp nhật ký truy vấn chậm (cũng như tệp nhật ký truy vấn chung và nhật ký lỗi). Nó không ảnh hưởng đến múi giờ của nhật ký truy vấn chung và thông báo nhật ký truy vấn chậm được ghi vào bảng nhật ký, nhưng các hàng được lấy từ các bảng đó có thể được chuyển đổi từ múi giờ hệ thống cục bộ sang múi giờ mong muốn với log_slow_admin_statements1 hoặc bằng cách đặt hệ thống phiên log_slow_admin_statements2 Biến đổi.

Theo mặc định, một bản sao không viết các truy vấn được sao chép vào nhật ký truy vấn chậm. Để thay đổi điều này, hãy bật biến hệ thống log_slow_admin_statements3 (từ MySQL 8.0.26) hoặc log_slow_admin_statements4 (trước MySQL 8.0.26). Lưu ý rằng nếu sao chép dựa trên hàng được sử dụng (log_slow_admin_statements5), các biến hệ thống này không có tác dụng. Các truy vấn chỉ được thêm vào nhật ký truy vấn chậm của bản sao khi chúng được đăng nhập định dạng câu lệnh trong nhật ký nhị phân, nghĩa là khi log_slow_admin_statements6 được đặt hoặc khi log_slow_admin_statements7 được đặt và câu lệnh được đăng nhập ở định dạng câu lệnh. Các truy vấn chậm được ghi ở định dạng hàng khi log_slow_admin_statements7 được đặt hoặc được ghi lại khi log_slow_admin_statements5 được đặt, không được thêm vào nhật ký truy vấn chậm của bản sao, ngay cả khi log_slow_admin_statements3 hoặc log_slow_admin_statements4 được bật.

Nội dung nhật ký truy vấn chậm

Khi nhật ký truy vấn chậm được bật, máy chủ ghi đầu ra vào bất kỳ điểm đến nào được chỉ định bởi biến hệ thống log_output. Nếu bạn bật nhật ký, máy chủ sẽ mở tệp nhật ký và ghi tin nhắn khởi động vào nó. Tuy nhiên, việc đăng nhập thêm các truy vấn vào tệp không xảy ra trừ khi điểm đến nhật ký log_queries_not_using_indexes3 được chọn. Nếu đích là log_queries_not_using_indexes4, máy chủ sẽ không có truy vấn nào ngay cả khi nhật ký truy vấn chậm được bật. Đặt tên tệp nhật ký không ảnh hưởng đến việc đăng nhập nếu log_queries_not_using_indexes3 không được chọn làm đích đầu ra.

Nếu nhật ký truy vấn chậm được bật và log_queries_not_using_indexes3 được chọn làm đích đầu ra, mỗi câu lệnh được ghi vào nhật ký được đi trước bởi một dòng bắt đầu bằng ký tự log_queries_not_using_indexes7 và có các trường này (với tất cả các trường trên một dòng):

  • log_queries_not_using_indexes8

    Thời gian thực hiện tuyên bố tính bằng giây.

  • log_queries_not_using_indexes9

    Thời gian để có được khóa trong vài giây.

  • --slow_query_log[={0|1}]0

    Số lượng hàng được gửi đến máy khách.

  • --slow_query_log[={0|1}]1

    Số lượng hàng được kiểm tra bởi lớp máy chủ (không tính bất kỳ công cụ xử lý nội bộ nào cho các công cụ lưu trữ).

Kích hoạt biến hệ thống --slow_query_log[={0|1}]2 (có sẵn kể từ MySQL 8.0.14) khiến máy chủ viết các trường bổ sung sau vào đầu ra log_queries_not_using_indexes3 ngoài các trường vừa được liệt kê (đầu ra --slow_query_log[={0|1}]4 không bị ảnh hưởng). Một số mô tả trường đề cập đến tên biến trạng thái. Tham khảo các mô tả biến trạng thái để biết thêm thông tin. Tuy nhiên, trong nhật ký truy vấn chậm, các bộ đếm là các giá trị mỗi lần, không phải là giá trị mỗi phiên tích lũy.

  • --slow_query_log[={0|1}]5

    Định danh chủ đề câu lệnh.

  • --slow_query_log[={0|1}]6

    Số lỗi câu lệnh, hoặc 0 nếu không xảy ra lỗi.

  • --slow_query_log[={0|1}]7

    Nếu câu lệnh bị chấm dứt, số lỗi cho biết lý do tại sao hoặc 0 nếu câu lệnh chấm dứt bình thường.

  • --slow_query_log[={0|1}]8

    Giá trị --slow_query_log[={0|1}]9 cho câu lệnh.

  • --slow_query_log0

    Giá trị --slow_query_log1 cho câu lệnh.

  • --slow_query_log2

    Giá trị --slow_query_log3 cho câu lệnh.

  • --slow_query_log4

    Giá trị --slow_query_log5 cho câu lệnh.

  • --slow_query_log6

    Giá trị --slow_query_log7 cho câu lệnh.

  • --slow_query_log8

    Giá trị --slow_query_log9 cho câu lệnh.

  • --slow_query_log_file=file_name0

    Giá trị --slow_query_log_file=file_name1 cho câu lệnh.

  • --slow_query_log_file=file_name2

    Giá trị --slow_query_log_file=file_name3 cho câu lệnh.

  • --slow_query_log_file=file_name4

    Giá trị --slow_query_log_file=file_name5 cho câu lệnh.

  • --slow_query_log_file=file_name6

    Giá trị --slow_query_log_file=file_name7 cho câu lệnh.

  • --slow_query_log_file=file_name8

    Giá trị --slow_query_log_file=file_name9 cho câu lệnh.

  • log_output0

    Giá trị log_output1 cho câu lệnh.

  • log_output2

    Giá trị log_output3 cho câu lệnh.

  • log_output4

    Giá trị log_output5 cho câu lệnh.

  • log_output6

    Giá trị log_output7 cho câu lệnh.

  • log_output8

    Thời gian bắt đầu thực thi tuyên bố.

  • log_output9

    Thời gian cuối thực hiện tuyên bố.

Một tệp nhật ký truy vấn chậm nhất định có thể chứa hỗn hợp các dòng có và không có các trường bổ sung được thêm vào bằng cách bật --slow_query_log[={0|1}]2. Máy phân tích tệp nhật ký có thể xác định xem một dòng có chứa các trường bổ sung theo số lượng trường hay không.

Mỗi câu lệnh được ghi vào tệp nhật ký truy vấn chậm được đi trước bởi câu lệnh host_name1 bao gồm dấu thời gian. Kể từ MySQL 8.0.14, dấu thời gian cho biết khi nào tuyên bố chậm bắt đầu thực thi. Trước 8.0,0,14, dấu thời gian cho biết khi câu lệnh chậm được ghi lại (xảy ra sau khi câu lệnh kết thúc thực thi).

Mật khẩu trong các câu lệnh ghi vào nhật ký truy vấn chậm được máy chủ viết lại không xảy ra theo nghĩa đen trong văn bản đơn giản. Xem Phần & NBSP; 6.1.2.3, mật khẩu và ghi nhật ký.

Từ MySQL 8.0,29, các câu lệnh không thể phân tích cú pháp (ví dụ, do lỗi cú pháp) không được ghi vào nhật ký truy vấn chậm.