Tối ưu cơ sở dữ liệu MySQL, tăng khả năng chịu tải VPS/hosting



Mặc định các phiên bản mới của MySQL (từ 5.5 trở đi) đã bỏ MyISAM để chuyển sang dùng InnoDB làm storage engine (kiểu lưu trữ / công nghệ lưu trữ) mặc định. Điều này có ảnh hưởng không hề nhỏ đến các trang web đang sử dụng cơ sở dữ liệu MySQL nói chung và mã nguồn WordPress nói riêng.

Nói qua để các bạn biết, MySQL hiện nay có 3 loại storage engine, bao gồm Memory, MyISAM, InnoDB. Trong đó, chỉ có 2 cái cuối thường dùng cho WordPress. Để giúp các bạn dễ hình dung hơn, mình sẽ đi phân tích ưu, nhược điểm của từng công nghệ lưu trữ này trước đã nhé.

1. Kiểu lưu trữ Memory

Đúng như tên gọi, memory là kiểu lưu dữ liệu trên bộ nhớ ram nên sẽ mất hết nếu như máy chủ gặp sự cố khởi động lại, mất điện,… Bù lại nó cho hiệu năng vượt trội về khả năng đọc ghi dữ liệu. Riêng khoản “mất hết” là đã thấy không phù hợp cho các loại dữ liệu quan trọng rồi. 🙁



2. Kiểu lưu trữ MyISAM

Ra đời trước InnoDB, MyISAM có ưu điểm là cho tốc độ đọc, truy xuất cơ sở dữ liệu (CSDL) cực nhanh và cũng là thằng nhanh thứ nhì, chỉ sau Memory. Tuy nhiên, nhược điểm ở đây là tốc độ ghi (thêm/sửa/xóa) quá chậm chạp vì MyISAM chỉ cho phép cập nhật từng bản ghi một trong 1 bảng. Nhưng lệnh ghi đến sau sẽ bị xếp vào hàng đợi, khiến cho tổng thể bị chậm theo. Lấy ví dụ đơn giản như một hàng dài tắc đường cỡ vài cây số ấy.

3. Kiểu dữ liệu InnoDB

Ưu điểm lớn của InnoDB là ở khả năng ghi dữ liệu cực nhanh do sử dụng cơ chế Row Level Locking cho phép cập nhật nhiều bản ghi cùng lúc. Gọi là thua MyISAM về khả năng đọc, nhưng điều đó không có nghĩa là InnoDB quá chậm. Tuy nhiên, điều đáng quan tâm ở đây lại là việc InnoDB tiêu tốn quá nhiều ram khi chạy. Chính bởi vậy, việc quá nhiều truy vấn ập đến dễ khiến cho MySQL “chết không kịp ngáp” do thiếu tài nguyên hoạt động, từ đó nảy sinh nên lỗi trắng trang thần thánh mà giang hồ vẫn thường đồn đại.

4. Chọn kiểu nào là tối ưu nhất đối với WordPress

Với một site WordPress thông thường thì việc truy vấn, đọc dữ liệu được tiến hành nhiều nhất. Bởi cứ mỗi lần có khách ghé thăm là sẽ đọc từ CSDL, xử lí rồi mới hiển thị nội dung bài viết lên màn hình. Do vậy kiểu thích hợp nhất là MyISAM.

Để chuyển đổi kiểu từ InnoDB sang MyISAM, bạn mở phpMyAdmin lên, chọn cơ sở dữ liệu từ cột bên trái. Kế tiếp bạn ghi lại tên những bảng nào cần chuyển kiểu.

Như ở đây mình đang có 2 bảng thuộc kiểu InnoDB. Bạn nhấn tab SQL, rồi chạy các lệnh sau.

alter table wp_commentmeta engine=myisam;

alter table wp_comments engine=myisam;

...

Nhớ phải thay tên bảng bôi đỏ bằng tên bảng của bạn nhé!

Có bao nhiêu bảng muốn chuyển sẽ tương đương với bấy nhiêu câu lệnh cần chạy. Vậy là xong!

Thông tin thêm:

  • Nếu các bạn muốn chuyển đổi ngược lại về như cũ chỉ cần thay đổi “myisam” trong câu lệnh thành “innodb” là được.
  • Với những site nào có lượng comment tương tác cao thì nên để bảng wp_comments là InnoDB nhé. Vì ưu điểm của thằng cu Inno là tốc độ ghi dữ liệu cực bá mà lại.

Cuối cùng

Hãy test thử tốc độ tải trang và theo dõi mức độ chiếm dụng ram để thấy rõ hiệu quả mà MyISAM mang lại nhé!

Chúc các bạn thành công!

 





Bình luận

avatar