Site logo

Cấu Hình Query Log Và Slow Query Log Trong MySQL: Server Tự Cài Và AWS RDS

5:00 read

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:

  1. 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.
  2. 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.