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_statements
và log_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_limit
1. Đặt min_examined_row_limit
0 thành 0 để vô hiệu hóa nhật ký hoặc thành 1 để bật nó. Đặt min_examined_row_limit
1 để 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_limit
4.
Để 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_limit
6, min_examined_row_limit
7, min_examined_row_limit
8, min_examined_row_limit
9, long_query_time
0, long_query_time
1 và long_query_time
2.
Để 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_time
4. 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:
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.Truy vấn phải mất ít nhất
long_query_time
giây hoặclog_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.Truy vấn phải đã kiểm tra ít nhất
min_examined_row_limit
hàng.Truy vấn không được đàn áp theo cài đặt
long_query_time
4.
Biến hệ thống log_slow_admin_statements
0 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_statements
1 hoặc bằng cách đặt hệ thống phiên log_slow_admin_statements
2 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_statements
3 [từ MySQL 8.0.26] hoặc log_slow_admin_statements
4 [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_statements
5], 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_statements
6 được đặt hoặc khi log_slow_admin_statements
7 đượ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_statements
7 được đặt hoặc được ghi lại khi log_slow_admin_statements
5 đượ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_statements
3 hoặc log_slow_admin_statements
4 đượ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_indexes
3 được chọn. Nếu đích là log_queries_not_using_indexes
4, 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_indexes
3 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_indexes
3 đượ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_indexes
7 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_indexes
8Thời gian thực hiện tuyên bố tính bằng giây.
log_queries_not_using_indexes
9Thời gian để có được khóa trong vài giây.
--slow_query_log[={0|1}]
0Số lượng hàng được gửi đến máy khách.
--slow_query_log[={0|1}]
1Số 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_indexes
3 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}]
6Số lỗi câu lệnh, hoặc 0 nếu không xảy ra lỗi.
--slow_query_log[={0|1}]
7Nế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}]
8Giá trị
--slow_query_log[={0|1}]
9 cho câu lệnh.--slow_query_log
0Giá trị
--slow_query_log
1 cho câu lệnh.--slow_query_log
2Giá trị
--slow_query_log
3 cho câu lệnh.--slow_query_log
4Giá trị
--slow_query_log
5 cho câu lệnh.--slow_query_log
6Giá trị
--slow_query_log
7 cho câu lệnh.--slow_query_log
8Giá trị
--slow_query_log
9 cho câu lệnh.--slow_query_log_file=
file_name
0Giá trị
--slow_query_log_file=
file_name
1 cho câu lệnh.--slow_query_log_file=
file_name
2Giá trị
--slow_query_log_file=
file_name
3 cho câu lệnh.--slow_query_log_file=
file_name
4Giá trị
--slow_query_log_file=
file_name
5 cho câu lệnh.--slow_query_log_file=
file_name
6Giá trị
--slow_query_log_file=
file_name
7 cho câu lệnh.--slow_query_log_file=
file_name
8Giá trị
--slow_query_log_file=
file_name
9 cho câu lệnh.log_output
0Giá trị
log_output
1 cho câu lệnh.log_output
2Giá trị
log_output
3 cho câu lệnh.log_output
4Giá trị
log_output
5 cho câu lệnh.log_output
6Giá trị
log_output
7 cho câu lệnh.log_output
8Thời gian bắt đầu thực thi tuyên bố.
log_output
9Thờ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_name
1 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.