Phần 1 đã hướng dẫn các bạn một số kinh nghiệm trong việc tối ưu hóa mysql cho xenforo tuy nhiên thì còn vấn đề về phân mảnh trong mysql thì chưa đề cập đến, do vậy phần 2 này chúng ta cùng tìm hiểu về sự phân mảnh ( Fragmentation ) trong database và cách sửa chữa phân mảnh để tối ưu mysql
Thế nào là phân mảnh database ?
- Trong khi sử dụng thì chúng ta thường xuyên xóa các bài viết trong diễn đàn , và về lâu dài dữ liệu của chúng ta sẽ bị phân mảnh ở table xf_post và xf_thread
Phân mảnh có nghĩa là trật tự vật lý của các trang chỉ mục trên ổ đĩa không gần với chỉ số thứ tự của ID bài viết trên forum. Có nghĩa là khoảng cách giữa các dữ liệu cách nhau quá xa và gọi là phân mảnh
- Dấu hiệu của phân mảnh có thể là bảng dữ liệu có kích thước lớn hơn so với thực tế dung lượng thật, tốc độ truy vấn đến một bài viết trên table xf_post rất chậm, chậm hơn với hơn so với tốc độ đọc và ghi trên ổ đĩa ( I / O )
Ở xenforo sử dụng InnoDB do vậy cúng ta cần phải kiểm tra phân mảnh thường xuyên bởi vì khi xóa dữ liệu trên InnoDB nó không bao giờ ghi đè dữ liệu mới vào chỗ bị xóa... Nó chỉ đánh dấu là dữ liệu đó không được sử dụng nữa thôi chứ không hẳn là đã xóa trên đĩa. Kết quả là, kích thước dữ liệu tăng rất ảo, khi chúng ra backup và restore rất chậm.
Một số diễn đàn nhiều bài viết khi bị truy vấn tới các bài viết cũ có thể dẫn đến lỗi 503 hoặc Fatal error: Out of memory, library/Zend/Db/Statement/Mysqli.php on line 304 ....
Cách sửa chữa lỗi phân mảnh
Đa số phân mảnh ở table xf_post vì ở đó thường xuyên chúng ta xóa các bài viết hàng ngày, thậm chí xóa cả tháng trời và qua nhiều năm ở bảng này sẽ có rất nhiều phân mảnh
Các bạn có thể sử dụng myphpadmin để thực hiện bằng tùy chọn Optimize Table
Chọn bảng xf_post sau đó tìm tùy chọn Optimize Table bên dưới
Nếu database của bạn lớn thì hãy làm thông qua ssh để không bị lỗi giữa chừng
Khi thực hiện xong database của bạn có thể đã giảm đến 1 nửa dung lượng đấy
Chúc các bạn thành công
Phần sau sẽ hướng dẫn tối ưu hóa về mã nguồn và cách config cache cho xenforo
Nguồn: DVPDA
Thế nào là phân mảnh database ?
- Trong khi sử dụng thì chúng ta thường xuyên xóa các bài viết trong diễn đàn , và về lâu dài dữ liệu của chúng ta sẽ bị phân mảnh ở table xf_post và xf_thread
Phân mảnh có nghĩa là trật tự vật lý của các trang chỉ mục trên ổ đĩa không gần với chỉ số thứ tự của ID bài viết trên forum. Có nghĩa là khoảng cách giữa các dữ liệu cách nhau quá xa và gọi là phân mảnh
- Dấu hiệu của phân mảnh có thể là bảng dữ liệu có kích thước lớn hơn so với thực tế dung lượng thật, tốc độ truy vấn đến một bài viết trên table xf_post rất chậm, chậm hơn với hơn so với tốc độ đọc và ghi trên ổ đĩa ( I / O )
Ở xenforo sử dụng InnoDB do vậy cúng ta cần phải kiểm tra phân mảnh thường xuyên bởi vì khi xóa dữ liệu trên InnoDB nó không bao giờ ghi đè dữ liệu mới vào chỗ bị xóa... Nó chỉ đánh dấu là dữ liệu đó không được sử dụng nữa thôi chứ không hẳn là đã xóa trên đĩa. Kết quả là, kích thước dữ liệu tăng rất ảo, khi chúng ra backup và restore rất chậm.
Một số diễn đàn nhiều bài viết khi bị truy vấn tới các bài viết cũ có thể dẫn đến lỗi 503 hoặc Fatal error: Out of memory, library/Zend/Db/Statement/Mysqli.php on line 304 ....
Cách sửa chữa lỗi phân mảnh
Đa số phân mảnh ở table xf_post vì ở đó thường xuyên chúng ta xóa các bài viết hàng ngày, thậm chí xóa cả tháng trời và qua nhiều năm ở bảng này sẽ có rất nhiều phân mảnh
Các bạn có thể sử dụng myphpadmin để thực hiện bằng tùy chọn Optimize Table
Chọn bảng xf_post sau đó tìm tùy chọn Optimize Table bên dưới
Nếu database của bạn lớn thì hãy làm thông qua ssh để không bị lỗi giữa chừng
PHP:
mysql -u myuser -p
use mydatabase;
optimize table xf_post;
Khi thực hiện xong database của bạn có thể đã giảm đến 1 nửa dung lượng đấy
Chúc các bạn thành công
Phần sau sẽ hướng dẫn tối ưu hóa về mã nguồn và cách config cache cho xenforo
Nguồn: DVPDA