Tối ưu WooCommerce MySQL

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

Dự án sử dụng dịch vụ Bảo trì website của Code Tốt được theo dõi phần tải trang chậm và được hỗ trợ kỹ thuật tối ưu kèm theo.

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:

Thêm index table để tối ưu WooCommerce MySQL

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:

  1. 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.
  2. 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).
  3. Xoá cache và kiểm tra

Kết quả kiểm tra thử nghiệm trên Query Monitor

Kết quả trước khi tối ưu MySQL WooCommerce
Kết quả sau khi tối ưu MySQL WooCommerce

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
5/5 - (2 bình chọn)

Bài viết liên quan