Hôm nay, Websitequangngai sẽ tư vấn cho các bạn việc lựa chọn kiểu storage engine cho table dữ liệu MySQL Wordpres, cũng như cách hoạt động của các storage engine.
Như đã đề cập trong bài viết Cách fix lỗi “The YARPP database has an error…” , mình đã hướng dẫn cho các bạn cách chuyển đổi kiểu storage engine. Bây giờ ta sẽ tìm hiểu cách thức hoạt động và lựa chọn kiểu storage engine cho phù hợp với website WordPress mà còn cả với các database của các loại website khác sử dụng cơ sở dữ liệu MySQL.
MySQL là hệ quản trị cơ sở dữ liệu miễn phí được sử dụng nhiều nhất khi ứng dụng được viết bằng ngôn ngữ PHP. Tuy nhiên, khi tạo 1 table (bảng) trong MySQL sẽ có nhiều kiểu Storage Engine cho bạn lựa chọn. Trong đó có 3 kiểu lưu trữ storage engine được dùng nhiều nhất là MyISAM, InnoDB và Memory. Vậy khi nào ta dùng MyISAM, InnoDB, hay MEMORY ?
-
Storage Engine: InnoDB trong MySQL là gì?
InnoDB là kiểu Storage Engine mới hơn MyISAM. Storage Engine này không hỗ trợ Full Text Index ( lập chỉ mục toàn cột) như MyISAM, nhưng hỗ trợ quan hệ giữa các bảng (Khóa ngoại). Do đó, kiểu Storage này kiểm tra tính toàn vẹn dữ liệu và ràng buộc dữ liệu rất cao nên ít khi xảy ra tình trạng hỏng chỉ mục và Crash như MyISAM.
Ngoài ra, kiểu Storage Engine này hoạt động theo cơ chế Row Level Locking nên khi cập nhật (Thêm,xóa,sửa) 1 table thì chỉ có bản ghi đang bị thao tác bị khóa mà thôi, các hoạt động khác trên table này vẫn diễn ra bình thường.
Vì những tính chất trên, kiểu Storage Engine này thích hợp sử dụng cho Ngân hàng và các trang web có tần suất cập nhật dữ liệu cao như Mạng xã hội, diễn đàn…. (sử dụng CMS vBulletin, xenforo…)
Tuy nhiên, nhược điểm của InnoDB là hoạt động tốn RAM hơn so với MyISAM (Nếu MyISAM mà tần suất insert hay update cao thì nếu cấu hình chưa đủ mạnh thì khéo còn tốn RAM nhiều hơn InnoDB vì hàng đợi lớn )
-
Storage Engine: MyISAM trong MySQL là gì?
Đây là một trong hai kiểu Storage Engine mặc định khi tạo table và được dùng phổ biết nhất. Storage Engine này cho phép lập chỉ mục toàn cột. Do đó, Storage Engine này cho tốc độ truy suất (Đọc và tìm kiếm) nhanh nhất trong các Storage Engine.
Tuy nhiên, nhược điểm của MyISAM là hoạt động theo kiểu Table Level locking nên khi cập nhật (Thêm, sửa, xóa) 1 bản ghi nào đó trong cùng 1 table thì nó sẽ bị khóa lại, không cho cập nhật cho đến khi thao tác cập nhật trước đó thực hiện xong. Nói đơn giản là không cho thực hiện 2 hoặc nhiều truy vấn cùng lúc ở một table.
Ngoài ra,MyISAM được thiết kế đơn giản và không kiểm tra ràng buộc dữ liệu nên loại Storage Engine này dễ bị hỏng chỉ mục và dễ bị Crash. Đây là cơn ác mộng của các webmaster khi table Crash là table có dung lượng lớn, thời gian phục hồi sẽ rất lâu.
Vì vậy, kiểu storage engine này được khuyến kích sử dụng cho các website có data cỡ vừa và nhỏ như blog sử dụng CMS WordPress vì truy xuất nhanh và ít tốn ram.
-
Storage Engine: Memory trong MySQL là gì?
Memory là kiểu Storage Engine được lưu trữ dữ liệu trực tiếp lên RAM nên tốc độ truy xuất và cập nhật rất nhanh. Vì thế, nó được dùng làm các table chứa dữ liệu tạm, chứa các phiên làm việc của user…
Khi khởi động lại dịch vụ MySQL thì dữ liệu trên bảng có Storage Engine là MEMORY sẽ mất hết dữ liệu. Chính vì thế nên khi các bạn khởi động lại mysqld trên VPS hay Server thì sẽ thấy số người online = 0 . MEMORY sử dụng cơ chế table-level locking như MyISAM.
Dung lượng của 1 bảng Storage Engine dạng MEMORY phụ thuộc vào cấu hình thông số max_heap_table_size trong file my.cnf, mặc định 1 bảng kiểu MEMORY có dung lượng tối đa là 16MB. Nếu vượt quá sẽ phát sinh lỗi: Table abc is full…
-
Cách chuyển đổi Storage Engine cho từng table trong data MySQL?
Câu lệnh truy vấn chung:
[php]ALTER TABLE tên_table_cần_chuyển_storage_engine ENGINE = Tên_Kiểu_Storage_Engine_Mới;[/php]
với Tên_Kiểu_Storage_Engine_Mới do bạn quyết định là MyISAM, InnoDB, Memory.
Lưu ý, nếu trước đó table này dùng MyISAM mà có cột nào đặt Full Text Index thì bạn phải xóa Full Text Index trên cột đó đi mới có thể chuyển được san InnoDB nhé.
Mình chỉ nêu cách này để các bạn có chút hiểu biết về MySQL thực hiện, còn bạn nào không rành về cái này thì có thể xem cách chuyển đổi bằng giao diện người dùng trên phpMyadmin ở bài viết sau.