Cấu Hình Query Log Và Slow Query Log Trong MySQL: Server Tự Cài Và AWS RDS
Giới Thiệu
Bài Index trong MySQL và Tối ưu query với index đã chỉ ra cách dùng EXPLAIN/EXPLAIN ANALYZE để tìm điểm nghẽn khi bạn đã biết câu query nào đang chậm. Nhưng có một câu hỏi xuất hiện trước đó, thường xuyên hơn nhiều: làm sao biết câu query nào đang chạy, và câu nào đang chậm — khi bạn không có sẵn log của application, hoặc nghi ngờ có một job/cron/API nào đó đang âm thầm bắn ra query nặng?
Câu trả lời nằm ở hai loại log có sẵn trong MySQL:
- General Query Log: ghi lại mọi câu lệnh SQL server nhận được — dùng để audit, debug "ai đang query gì", nhưng chi phí hiệu năng cao nếu bật lâu dài.
- Slow Query Log: chỉ ghi lại những câu lệnh chạy chậm hơn một ngưỡng thời gian — chi phí thấp hơn nhiều, phù hợp để bật thường trực trên production.
Bài này tập trung vào phần thực dụng nhất: cách bật/tắt, cách chọn nơi xuất log (file hay table), và cách kiểm tra log — được trình bày song song cho hai kịch bản khác nhau hoàn toàn về vận hành:
- Server MySQL tự cài (self-managed): bạn có SSH, có quyền sửa
my.cnf, có quyền đọc file trên đĩa. - AWS RDS: MySQL được AWS quản lý, không có SSH, không có quyền sửa file cấu hình trực tiếp — mọi thay đổi tham số phải đi qua DB Parameter Group.
Đây là hai thế giới vận hành khác nhau, và một trong những lỗi phổ biến nhất của kỹ sư mới chuyển từ on-premise sang cloud là cố tìm file slow.log trên RDS — thứ không tồn tại theo cách bạn nghĩ.
Tổng Quan: General Query Log Và Slow Query Log Khác Nhau Thế Nào?
| Tiêu chí | General Query Log | Slow Query Log |
|---|---|---|
| Ghi lại gì | Tất cả câu lệnh SQL (SELECT, INSERT, UPDATE, connect, quit...) | Chỉ câu lệnh có thời gian chạy > long_query_time |
| Chi phí hiệu năng | Cao — mỗi query đều tốn thêm I/O ghi log | Thấp — chỉ ghi khi vượt ngưỡng |
| Dùng khi nào | Debug ngắn hạn: "app này đang gửi query gì xuống DB?" | Bật thường trực trên production để phát hiện query chậm |
| Biến điều khiển bật/tắt | general_log |
slow_query_log |
| Biến chọn nơi ghi | log_output (FILE / TABLE / FILE,TABLE) |
log_output (dùng chung với General Query Log) |
| Khuyến nghị bật lâu dài? | Không — chỉ bật tạm thời rồi tắt ngay | Có — chi phí thấp, giá trị chẩn đoán cao |
Điểm quan trọng cần nhớ: cả hai loại log dùng chung một biến log_output để quyết định ghi ra đâu. Đây là phần nhiều người bỏ qua, nên ta sẽ nói kỹ ở mục tiếp theo.
Yêu cầu đăng nhập
Vui lòng đăng nhập để truy cập nội dung này
Additional Resources
Course Guide
Comprehensive PDF guide with examples
GitHub Repository
Example code for all lessons
Discussion
Have a question about this lesson? Post it here and get answers from instructors and peers.
