Sử dụng WooCommerce với lượng sản phẩm nhiều, bạn sẽ nhận thấy tình trạng web chậm dần ở trong phần quản trị, đặc biệt là khi cập nhật sản phẩm, hoặc trong trang danh sách các sản phẩm. Code Tốt đã có thử nghiệm một số cách để giảm tình trạng này thông qua tối ưu MySQL cho WooCommerce.
Theo dõi và nhận biết chỉ số web chậm bằng Query Monitor
Đầu tiên, cài plugin Query Monitor, sau đó bạn cần xem thông số tải trang trong trang Danh sách sản phẩm và thử sửa 1 vài sản phẩm có bị chậm không đã nhé. Nếu thấy mức load trang phải tầm 5s trong nhiều lần truy cập, vậy là bạn nên nghĩ tới việc tối ưu.
Về nghiên cứu này:
Code Tốt có những dự án e-commerce với lượng sản phẩm từ 1k đến 10k, nhưng trong bài viết này, mình thử nghiệm với các size dự án:
- 1 web shop có 902 sản phẩm, nhưng mỗi sản phẩm nhiều biến thể, và có thêm mục kho hàng (nhiều địa điểm)
- 1 web shop có 2700 sản phẩm, nhưng thiết kế database dạng flat tức ít sản phẩm biến thể, chủ yếu là sản phẩm nhập lên
Tối ưu MySQL dành cho môi trường Hosting/VPS
Đầu tiên, phải khẳng định tài nguyên VPS (với thông số CPU, RAM bạn được sử dụng) thì vẫn ổn hơn shared (được chia sẻ nhiều tài khoản trên Hosting).
Với dịch vụ VPS
Ta cần tiến hành bước cấu hình sơ bộ service setting cho MySQL hoặc MariaDB, thường là sửa file /etc/my.cnf
Các thông số này cần yêu cầu kỹ thuật và theo dõi để điều chỉnh trong vòng 1-3 round (làm đi làm lại) cho tới khi đạt.
Ngoài ra, tối ưu PHP process cũng là một ưu tiên quan trọng, ví dụ như mình thấy hiệu suất đã cải thiện vào MySQL thì sẽ được tư vấn về tối ưu PHP process giảm xuống hoặc cho mức accept connection cao hơn. Về việc này, bạn nên làm việc với đơn vị hosting có cung cấp dịch vụ Managed VPS như 123Host hoặc InterData nhé.
Với dịch vụ Shared Hosting, bạn nên tăng mức cấu hình PHP lên thông qua file wp-config.php
define('WP_MEMORY_LIMIT', '512M');
define('WP_MAX_MEMORY_LIMIT, '768M');
Tối ưu WooCommerce MySQL từ trang Quản trị WordPress
Về phía trang Quản trị, mình đã thử nghiệm và nhận ra việc thiếu key index là vấn đề chính, vì nó chủ yếu ảnh hưởng tới Duplicate Queries (bạn xem trong Query Monitor sẽ thấy rõ).
Các duplicate query bao gồm:
- Thông tin user, ví dụ một user là tác giả nhiều sản phẩm bị liên tục call đi call lại mà không có index.
- Thông tin danh mục sản phẩm, ví dụ nhiều sản phẩm thuộc cùng 1 danh mục, nhưng dữ liệu về danh mục đó chưa được index dẫn đến bị trùng lặp rất nhiều.
Các bước tiến hành cài đặt và cấu hình Index MySQL như sau:
1. Cài đặt plugin Index WP MySQL For Speed (chưa có ngôn ngữ tiếng Việt, nhưng bạn có thể đóng góp bản dịch ở đây).
2. Vào menu Công cụ > Index MySQL
3. Đưa các table sau vào Index: (mục Add keys, nhớ bấm I have a backup)
wp_options (x rows, approximately)
wp_postmeta (x rows, approximately)
wp_posts (x rows, approximately)
wp_termmeta (x rows, approximately)
wp_usermeta (x rows, approximately)
wp_users (x rows, approximately)
wp_wc_orders_meta (x rows, approximately)
wp_woocommerce_order_itemmeta (x rows, approximately)
Nếu bạn đang bật chức năng Bình luận hoặc Review sản phẩm, thì mới thêm 2 table
wp_comments
wp_commentmeta
Một khi bạn thêm thành công, trên màn hình sẽ hiện như sau:
Tối ưu MySQL WooCommerce bằng bộ nhớ đệm Caching
Để cải thiện tốc độ tải trang quản trị, bạn tiến hành làm như sau:
- Cài đặt plugin Caching phổ biến, như LiteSpeed Cache hoặc W3 Total Cache. Nếu đang dùng plugin khác, bạn thử tìm các tuỳ chọn tương tự như bên dưới.
- Bật các option: Cache Logged-in User (tức bao gồm cả cache dành cho người dùng đã đăng nhập).
- Xoá cache và kiểm tra
Kết quả kiểm tra thử nghiệm trên Query Monitor
Trước khi thực hiện:
Trang danh sách sản phẩm (trong admin) load ~10 giây, có nhiều duplicate query, đặc biệt là về user, danh mục sản phẩm (vì hiện trong các cột của danh sách sản phẩm)
Trang sửa sản phẩm load khoảng 15 giây, có nhiều duplicate query, đặc biệt là về user
Sau khi thực hiện:
Trang danh sách sản phẩm: load khoảng 4-5 giây
Trang sửa sản phẩm: load khoảng 4 giây
Kết luận
Như Code Tốt đã chia sẻ, bạn sẽ cần tiến hành các bước sau:
- Tối ưu sơ bộ từ môi trường hosting/VPS bằng các cấu hình tối ưu WooCommerce MySQL mình đề xuất.
- Cài đặt và cấu hình plugin Index MySQL giúp giảm các duplicate query