Hướng dẫn này sẽ giải thích cách thiết lập ghi nhật ký "truy vấn chậm" (slow query log) trong MySQL để bạn có thể xác định được các truy vấn nào đang gây ra tình trạng chậm hệ thống.
Nếu bạn vận hành hoặc quản trị một máy chủ MySQL môi trường production, rất có thể đôi khi nó chạy chậm hơn bình thường, và việc tìm ra nguyên nhân có thể tốn rất nhiều thời gian. Việc xác định chính xác truy vấn nào làm chậm cơ sở dữ liệu thường khá khó khăn. May mắn là MySQL cung cấp một tùy chọn hỗ trợ: ghi nhật ký các truy vấn chậm. Nhờ đó, khi máy chủ cơ sở dữ liệu chạy chậm bất thường, bạn chỉ cần mở tệp nhật ký này trong trình soạn thảo văn bản để xem các truy vấn nào đang thực thi chậm. Hãy cùng tìm hiểu cách thiết lập tính năng này.
Cấu hình tệp my.cnf
Đầu tiên, hãy mở tệp cấu hình của máy chủ MySQL – my.cnf. Trên Linux, tệp này thường nằm trong thư mục /etc hoặc /etc/mysql. Kiểm tra xem tham số slow_query_log (trên các phiên bản MySQL cũ là log-slow-queries) đã được thiết lập chưa. Nếu chưa, hãy thêm dòng sau:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
Bạn cũng cần thiết lập ngưỡng thời gian mà một truy vấn được coi là "chậm". Trên máy chủ của tôi, tôi đặt giá trị này là 30 giây:
long_query_time = 30
Lưu ý: Giá trị long_query_time có thể thiết lập ở đơn vị giây, bao gồm cả phần thập phân (ví dụ: 0.5 cho 500ms) để bắt các truy vấn chậm hơn mức mong muốn.
Khởi động lại và theo dõi
Khởi động lại dịch vụ MySQL để áp dụng thay đổi:
sudo systemctl restart mysql
Sau đó, theo dõi tệp mysql-slow.log. Mỗi khi một truy vấn mất thời gian thực thi vượt quá ngưỡng bạn đã đặt (30 giây trong ví dụ này), nó sẽ được ghi vào nhật ký. Việc gỡ lỗi các truy vấn MySQL giờ đây sẽ đơn giản và nhanh chóng hơn nhiều. Hãy nhớ kiểm tra tệp này định kỳ. Một mẹo hữu ích là thiết lập một cron job để gửi tệp nhật ký này đến email của bạn mỗi vài ngày.
Phân tích nhật ký với mysqldumpslow
Để phân tích hiệu quả hơn, bạn có thể sử dụng công cụ mysqldumpslow đi kèm MySQL:
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
Lệnh này sẽ hiển thị 10 truy vấn chậm nhất theo tổng thời gian thực thi (-s t), giúp bạn nhanh chóng xác định các "kẻ thủ phạm" chính cần tối ưu hóa.