Coder.Wapsite.Me
Forum All Share Script | PHP
Vui lòng Đăng nhập hoặc Đăng kí để tham gia diễn đàn Wapmaster Việt Nam!
2015-05-12 18:37
avatarNgaongo [Sáng lập]
1. MyISAM trong MySQL

Đây là kiểu Storage Engine mặc định khi tạo bảng 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 (Full Text Index). 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,xóa,sửa) 1 bản ghi nào đó trong cùng 1 table thì table đó sẽ bị khóa lại, không cho cập nhật (Thêm,xóa,sửa) cho đến khi thao tác cập nhật trước đó thực hiện xong.

Ngoài ra, do 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, khi phục hồi rất lâu và hồi hộp

2. InnoDB trong MySQL

Đây là kiểu Storage Engine mới hơn MyISAM. Storage Engine này không hỗ trợ Full Text Index như MyISAM (Tin mừng là sắp có hỗ trợ ở các phiên bản mới, hiện tại đã có beta rồi ) 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 rất cao => Khó sả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 bảng 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.

3 . Chuyển đổi từ MyISAM đến InnoDB
Ở đây tôi lấy một ví dụ phổ biến nhất hiên nay là các diễn đàn xenforo . và rất nhiều các bạn hiện nay đang dùng xenforo gặp phải

Mặc định xenforo khi cài đặt sẽ lựa chọn Storage Engine là innoDB trong database . Với các ưu điểm của nó và đây là lựa chọn khôn ngoan của mã nguồn xenforo . Khác với VBB hiện nay vẫn sử dụng MyISAM.

Nhưng hầu hết các hostting việt nam hiện nay không kích hoạt chế độ innoDB , do vậy mà khi các bạn cài đặt thì xenforo sẽ nhận chế độ MyISAM . Thật là phiền phức đây . Lý do cũng là lúc bắt đầu sử dụng xenforo các bạn không để ý cái khuyến cáo của người ta là mysql server cần hỗ trợ innoDB . May mắn là ngay từ đầu diễn đàn của tôi dã dùng innoDB vì tôi đã biết được điều này :)

Để chắc chắn xem mysql trên hosting của các bạn có hỗ trợ innoDB hay không , đơn giản nhất là các bạn vào myphpadmin và vào mục Engines ở cuối để xem danh sách các Storage Engine được hỗ trợ

img
Đây là danh sách các Engines trên MYSQL server của tôi sử dụng với Percona server / Percona-XtraDB​

Nếu thấy mysql server có hỗ trợ innoDB thì chúng ta bắt đầu chuyển đổi cho xenforo của các bạn khi đã lỡ dùng MyISAM mất rồi
Vào mục
SQL và Copy nội dung dưới đây cho vào query box rồi chọn GO




Chú ý nếu database của các bạn lớn thì hãy copy từng dòng để thực hiện nếu không sẽ rất dễ gây ra hiện tượng time out .
Hãy cẩn thận backup database và off diễn đàn trước khi làm

img

Có một số lưu ý sau
Trong xenforo không phải tất cả các bảng đều sử dụng innoDB , do vậy những query kia đã được lấy ra từ các bản cần chuyển thành innoDB , còn những table còn lại hãy cứ để là MyiSAM cho đúng với mặc định của xenforo vì họ đã tính toán để tối ưu chúng rồi
Ngoài ra có một vài bảng sử dụng ENGINE là MEMORY như xf_session_activity , xf_thread_view .. các bạn hãy để mặc định nhé

Cần biết thêm về MEMORY trong MySQL

Đây 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 tối đa là bao nhiêu ?
Nó 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á bạn sẽ nhận được lỗi: Table xyz is full.
Chúc các bạn thành công

Cuối cùng khi vào phpmyadmin kiểm tra lại để xem các table bên trên đã được chuyển sang innoDB chưa nhé
img
Ai đang ở đây:
1 khách

Pair of Vintage Old School Fru