Tối ưu MariaDB là một trong những việc đơn giản nhưng hiệu quả nhất khi website WordPress trên VPS bắt đầu chậm. Ubuntu 24.04 cài sẵn MariaDB 10.11 với cấu hình mặc định khá dè dặt, ví dụ bộ đệm InnoDB chỉ 128MB, trong khi số kết nối tối đa lại khá cao so với một VPS nhỏ. Bài này hướng dẫn chỉnh vài thông số cốt lõi một cách an toàn, kiểm tra bằng số liệu thật trên máy của bạn thay vì chép cấu hình mẫu trên mạng.

Chuẩn bị

  • VPS Ubuntu 24.04 đã cài MariaDB từ kho Ubuntu, ví dụ theo bài cài LEMP cho WordPress.
  • Quyền sudo. Trên Ubuntu, tài khoản root của MariaDB dùng xác thực unix_socket, nên lệnh sudo mariadb vào thẳng được mà không cần mật khẩu.
  • Bản sao lưu cơ sở dữ liệu trước khi thay đổi, xem bài sao lưu VPS tự động.

Kiểm tra phiên bản và trạng thái:

mariadb --version
sudo systemctl status mariadb --no-pager

Bước 1: Xem RAM và dung lượng dữ liệu hiện có

Mọi con số cấu hình đều phụ thuộc vào RAM của VPS và lượng dữ liệu bạn có. Xem RAM:

free -h

Xem tổng dung lượng dữ liệu và chỉ mục InnoDB:

sudo mariadb -e "SELECT ROUND(SUM(data_length + index_length)/1024/1024) AS innodb_mb FROM information_schema.tables WHERE engine='InnoDB';"

Xem giá trị hiện tại của các biến quan trọng:

sudo mariadb -e "SHOW VARIABLES WHERE Variable_name IN ('innodb_buffer_pool_size','innodb_log_file_size','max_connections','tmp_table_size','max_heap_table_size');"

Bước 2: Chọn innodb_buffer_pool_size theo RAM

innodb_buffer_pool_size là vùng nhớ InnoDB dùng để giữ dữ liệu và chỉ mục hay truy cập. Tài liệu MariaDB khuyên bộ đệm nên chứa được phần lớn dữ liệu đang hoạt động, nhưng cũng cảnh báo đặt quá lớn sẽ khiến máy phải dùng swap, làm mọi thứ chậm hơn.

Trên VPS chạy chung Nginx, PHP-FPM và MariaDB, có thể bắt đầu theo bảng sau rồi điều chỉnh:

RAM VPSinnodb_buffer_pool_size gợi ýmax_connections gợi ý
1GB256M40
2GB512M60
4GB1G đến 1536M80
8GB2G đến 3G100 đến 150

Đây là điểm khởi đầu, không phải con số tuyệt đối. Nếu tổng dữ liệu InnoDB ở Bước 1 chỉ 300MB, đặt bộ đệm 2G cũng không giúp gì thêm. Ngược lại, nếu VPS chỉ chạy cơ sở dữ liệu, có thể dành phần lớn RAM cho bộ đệm.

Bước 3: Tạo file cấu hình riêng

Trên Ubuntu, MariaDB đọc các file trong /etc/mysql/mariadb.conf.d/ theo thứ tự tên. Thay vì sửa 50-server.cnf, hãy tạo file có số lớn hơn để ghi đè, giúp dễ quản lý và không xung đột khi cập nhật gói:

sudo nano /etc/mysql/mariadb.conf.d/99-tuning.cnf

Ví dụ cho VPS 2GB chạy WordPress:

[mysqld]
# Bộ đệm InnoDB
innodb_buffer_pool_size = 512M
innodb_log_file_size    = 128M

# Kết nối
max_connections         = 60
skip-name-resolve

# Bảng tạm trong bộ nhớ (hai giá trị nên bằng nhau)
tmp_table_size          = 32M
max_heap_table_size     = 32M

# Ghi log truy vấn chậm
slow_query_log          = 1
slow_query_log_file     = /var/log/mysql/mariadb-slow.log
long_query_time         = 2

Giải thích nhanh:

  • innodb_log_file_size: kích thước redo log. Tăng vừa phải giúp ghi dữ liệu mượt hơn với site có nhiều đơn hàng, bình luận. MariaDB 10.11 tự điều chỉnh file log khi khởi động lại, không cần xóa file thủ công như các bản rất cũ.
  • max_connections: mỗi kết nối tốn thêm bộ nhớ. Website nhỏ hiếm khi cần hơn số tiến trình PHP-FPM tối đa cộng thêm một ít dự phòng; mặc định 151 thường là dư với VPS 1 đến 2GB.
  • skip-name-resolve: bỏ tra cứu DNS ngược khi có kết nối. Lưu ý: sau khi bật, tài khoản phải được cấp quyền theo IP hoặc localhost, không theo tên máy.
  • tmp_table_size, max_heap_table_size: giới hạn bảng tạm trong RAM. Không nên đặt quá cao vì mỗi truy vấn có thể tạo bảng tạm riêng.
  • Slow query log: ghi lại truy vấn chạy quá 2 giây, giúp tìm plugin hoặc trang gây chậm.

Bước 4: Kiểm tra và khởi động lại MariaDB

Đảm bảo thư mục log tồn tại và thuộc người dùng mysql (gói MariaDB trên Ubuntu thường đã tạo sẵn):

sudo install -d -o mysql -g adm -m 2750 /var/log/mysql

Khởi động lại và kiểm tra:

sudo systemctl restart mariadb
sudo systemctl status mariadb --no-pager
sudo mariadb -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

Nếu MariaDB không khởi động được, xem lỗi bằng:

sudo journalctl -u mariadb -n 50 --no-pager

Lỗi thường gặp nhất là gõ sai tên biến hoặc đặt giá trị bộ nhớ vượt quá RAM còn trống. Sửa lại file 99-tuning.cnf rồi khởi động lại.

Bước 5: Theo dõi sau vài ngày

Sau khi website chạy ít nhất 24 giờ, kiểm tra số kết nối cao nhất đã dùng:

sudo mariadb -e "SHOW GLOBAL STATUS LIKE 'Max_used_connections';"

Nếu con số này luôn thấp hơn nhiều so với max_connections, cấu hình đang ổn. Nếu chạm trần, hãy xem lại số tiến trình PHP-FPM hoặc có bot nào đang tấn công trang trước khi tăng giới hạn.

Đánh giá bộ đệm InnoDB đủ hay chưa:

sudo mariadb -e "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';"

Innodb_buffer_pool_reads là số lần phải đọc từ ổ đĩa, Innodb_buffer_pool_read_requests là tổng số yêu cầu đọc. Tỷ lệ đọc từ đĩa càng nhỏ so với tổng thì bộ đệm càng hiệu quả.

Xem các truy vấn chậm nhất bằng công cụ có sẵn:

sudo mariadb-dumpslow -s t -t 10 /var/log/mysql/mariadb-slow.log

Bước 6: Dùng MySQLTuner để kiểm tra tổng thể

MySQLTuner là script đọc trạng thái máy chủ và đưa ra gợi ý. Gói có sẵn trong kho Ubuntu:

sudo apt update
sudo apt install -y mysqltuner
sudo mysqltuner

Đọc kỹ phần Recommendations. Công cụ không tự sửa gì, và một số gợi ý (như tăng bộ đệm lên bằng toàn bộ dữ liệu) có thể không phù hợp với VPS nhỏ chạy chung web server. Hãy thay đổi từng thông số một, theo dõi vài ngày rồi mới chỉnh tiếp.

Những điều không nên làm

  • Chép nguyên file my.cnf "siêu tối ưu" trên mạng: cấu hình cho máy 64GB RAM sẽ làm VPS 2GB hết bộ nhớ và bị OOM killer tắt MariaDB.
  • Bật lại query cache: tính năng này tắt mặc định trong MariaDB hiện đại, dễ gây tắc nghẽn khi ghi nhiều. Với WordPress, dùng Redis Object Cache và OPcache hiệu quả hơn.
  • Mở cổng 3306 ra Internet: MariaDB trên Ubuntu mặc định chỉ lắng nghe 127.0.0.1, hãy giữ nguyên nếu web và cơ sở dữ liệu cùng máy.
  • Bỏ qua swap: VPS nhỏ nên có swap dự phòng, xem bài tạo swap và theo dõi tài nguyên.

Khi nào nên nâng cấp VPS?

Nếu dữ liệu đang hoạt động lớn hơn nhiều so với RAM có thể dành cho bộ đệm, hoặc VPS thường xuyên dùng swap dù đã tinh chỉnh, đó là lúc cần thêm RAM hoặc ổ NVMe nhanh hơn. Bài VPS cho WordPress bán hàng cấu hình bao nhiêu là đủ có gợi ý chi tiết. Bạn có thể tham khảo các gói VPS đang có ưu đãi, ví dụ từ TDCloud và các nhà cung cấp khác trên canhdeal.vn.

Nguồn tham khảo