Bài viết chia sẻ các thiết lập performance tuning quan trọng cho MySQL sau khi cài đặt để đạt hiệu năng tốt nhất.
Điều kiện tiên quyết
Giả định MySQL đã cài đặt. Một số lưu ý:
- Chỉ thay đổi một thiết lập mỗi lần để đo lường tác động.
- Hầu hết thiết lập có thể thay đổi runtime bằng
SET GLOBAL, dễ dàng rollback. Sau đó ghi vào file cấu hình để vĩnh viễn. - Nếu thay đổi không có hiệu lực sau restart, kiểm tra file config đúng section.
- MySQL không cho phép trùng lặp setting; dùng version control để theo dõi thay đổi.
Các thiết lập Performance Tuning quan trọng (section [mysqld])
- innodb_buffer_pool_size: Quan trọng nhất cho InnoDB. Vùng nhớ cache dữ liệu và chỉ mục. Kích thước lớn tránh I/O đĩa. Thường 5-6GB cho RAM 8GB.
- innodb_log_file_size: Kích thước redo log. Lớn → hiệu năng ghi tốt, nhỏ → recovery nhanh. MySQL 5.5+ cải thiện recovery, giới hạn 4GB bị bỏ từ 5.6.
- max_connections: Tránh lỗi "Too many connections". Mặc định 151. Giá trị quá cao khiến server không phản hồi nếu nhiều kết nối hoạt động.
- innodb_log_buffer_size: Buffer cho transaction chưa commit. Mặc định 1MB. Tăng nếu có transaction lớn (text/blob).
- innodb_flush_method: Kiểm soát flush log/data ra đĩa.
O_DIRECTtốt khi có RAID controller write-back cache. Dùng sysbench để benchmark. - query_cache_size: Nổi tiếng gây bottleneck ngay cả khi concurrency trung bình. Khuyên tắt từ đầu (
query_cache_size=0). MySQL 5.6+ tắt mặc định. Dùng Memcached/Redis thay thế. Cẩn thận nếu app đã phụ thuộc query cache. - log_bin: Bật nếu làm replication master hoặc point-in-time recovery. Log bin giữ mãi → cần dọn dẹp qua
PURGE BINARY LOGShoặcexpire_logs_days. - skip_name_resolve: Tắt DNS lookup khi client kết nối (tránh chậm do DNS chậm). Khi bật, phải dùng IP trong GRANT thay vì hostname.
Bài viết tổng hợp các thiết lập: log_bin, skip_name_resolve, query_cache_size, innodb_log_buffer_size, max_connections, innodb_log_file_size, innodb_buffer_pool_size để tối ưu đọc/ghi MySQL.