
22 tháng 5, 2026
Database WooCommerce phình to khi shop lớn dần và cách xử lý gọn
Tách database WooCommerce là việc tách dữ liệu shop (đơn hàng, sản phẩm, phiên truy cập) ra khỏi bảng chung của WordPress để truy vấn nhanh hơn khi shop lớn. Cách làm phổ biến nhất hiện nay là bật HPOS, dọn bảng wp_options và xoá transient rác trước khi tính đến database vật lý riêng.
Nguyen Hien
Tôi là Nguyen Hien, Founder Web22, freelance team
Tách database WooCommerce là việc tách dữ liệu shop (đơn hàng, sản phẩm, phiên truy cập) ra khỏi bảng chung của WordPress để truy vấn nhanh hơn khi shop lớn. Cách làm phổ biến nhất hiện nay là bật HPOS, dọn bảng wp_options và xoá transient rác trước khi tính đến database vật lý riêng.
Khi một shop WooCommerce còn vài trăm đơn, mọi thứ chạy mượt. Vấn đề chỉ lộ ra lúc đơn hàng lên hàng chục nghìn, sản phẩm nhiều biến thể và lượt truy cập tăng: trang quản trị đơ vài giây, lọc đơn hàng quay vòng vòng, đôi khi host báo CPU vọt. Phần lớn những triệu chứng đó không nằm ở giao diện mà nằm ở database (cơ sở dữ liệu — nơi lưu mọi đơn hàng, sản phẩm, cài đặt). Bài này đi qua đúng các điểm phình to của một shop Việt khi lớn dần và cách gỡ theo thứ tự đáng làm nhất.
Ba chỗ database WooCommerce hay phình to nhất
1. Bảng wp_options và phần autoload
WordPress nạp toàn bộ autoload (các tuỳ chọn tự động tải — đọc một lần ngay đầu mỗi lần tải trang) vào bộ nhớ trước cả khi truy vấn sản phẩm đầu tiên. Trên shop WooCommerce nhiều plugin, khối autoload này dễ phình lên vài MB, và nó đập vào database mỗi request, kể cả khi trang đó chẳng cần đến. Từ WordPress 6.6, công cụ Site Health đã cảnh báo “Autoloaded options could affect performance” khi tổng autoload vượt 800 KB, và core tự tắt autoload cho các tuỳ chọn quá lớn. Đó là ngưỡng đáng lấy làm mốc kiểm tra.
Cách soi nhanh chỗ nặng nhất là một câu SQL liệt kê các option lớn nhất đang bật autoload:
SELECT option_name, LENGTH(option_value) FROM wp_options WHERE autoload IN ('yes','on','auto-on') ORDER BY LENGTH(option_value) DESC LIMIT 20;
Nhìn kết quả, bạn thường thấy vài plugin để rác autoload cả MB. Những option không cần nạp mỗi trang có thể đổi sang không autoload, thay vì xoá liều.
2. Transient rác không tự dọn
Transient (dữ liệu tạm — bộ nhớ đệm ngắn hạn của plugin) cũng nằm trong wp_options. Về lý thuyết chúng hết hạn rồi tự biến mất, nhưng thực tế rất nhiều transient không được dọn, tích lại hàng chục nghìn dòng. Nếu bảng wp_options của shop bạn to bất thường, thủ phạm số một thường là transient hết hạn còn nằm lại. Dọn bằng WP-CLI gọn và an toàn hơn xoá tay:
wp transient delete --expired— xoá những cái đã hết hạn (làm trước, ít rủi ro).wp transient delete --all— dọn sạch khi cần làm mạnh; WooCommerce sẽ tự tạo lại cái nào còn dùng.
3. Bảng đơn hàng lớn dần theo thời gian
Theo mặc định cũ, mỗi đơn WooCommerce là một bản ghi trong wp_posts cùng hàng loạt dòng wp_postmeta. Đây là bảng dùng chung cho bài viết, trang, sản phẩm… nên khi đơn hàng nhiều, các bảng này bị “nhét chung” rất nặng, lọc và tìm đơn chậm hẳn. Đây chính là chỗ HPOS sinh ra để giải quyết.

HPOS — bước nâng cấp đáng làm trước khi nghĩ đến database riêng
HPOS (High-Performance Order Storage — lưu đơn hàng hiệu năng cao) chuyển đơn hàng sang các bảng riêng được thiết kế đúng cho thương mại điện tử, có index riêng, ít thao tác đọc/ghi hơn và tách hẳn khỏi bảng nội dung chung. Từ WooCommerce 8.2 (tháng 10/2023) HPOS đã ổn định và bật mặc định cho cài đặt mới; tới các bản WooCommerce 10.x năm 2025 đây là chuẩn cho store mới. Shop cũ thì cần bật và đồng bộ thủ công.
Cách bật: vào WooCommerce → Settings → Advanced → Features, chọn mục High-Performance Order Storage. Với shop nhỏ, WooCommerce sẽ đồng bộ đơn hàng cũ ngay trong nền. Với shop lớn, nên đồng bộ theo lô bằng WP-CLI cho chắc:
wp wc hpos sync— chép đơn từ bảng posts sang bảng HPOS và kiểm tra hai bên khớp nhau.wp wc hpos diff— so từng đơn để chắc dữ liệu không lệch trước khi tắt đồng bộ ngược.
WooCommerce mô tả một store rất lớn (cỡ 9 triệu đơn) có thể mất khoảng một tuần để đồng bộ xong, nên với shop Việt vài chục nghìn đơn, quá trình này thường chỉ vài phút đến vài giờ. Trước khi bật, hãy backup database, kiểm tra plugin có tương thích HPOS không, và giữ chế độ đồng bộ một thời gian để có đường lui nếu cần.
Khi nào mới thật sự cần tách database riêng?
“Tách database” theo nghĩa vật lý — đưa shop sang một database hoặc một máy chủ database riêng — là bước cuối cùng, không phải bước đầu. Phần lớn shop chậm vì autoload phình, transient rác và chưa bật HPOS, chứ không phải vì thiếu một server riêng. Bạn chỉ nên nghĩ đến tách database vật lý khi:
- Đã dọn autoload, dọn transient, bật HPOS mà truy vấn vẫn nghẽn ở mức database.
- Một site bán hàng dùng chung host với nhiều site khác và muốn cách ly tài nguyên, tránh site này kéo chậm site kia.
- Lượng đơn và lượt truy cập đủ lớn để cần read replica (bản sao chỉ-đọc) hoặc một database server tách khỏi web server.
Việc này đụng tới hạ tầng và wp-config.php, dễ làm sập shop nếu sai, nên cần người rành làm. Nếu bạn đang tính tới mức này, Web22 có dịch vụ dựng và tối ưu shop WooCommerce lo trọn khâu hạ tầng database. Đường gần hơn cho shop tải nặng là đọc thêm cache database bằng Redis cho WooCommerce và tối ưu shop có lượt truy cập cao để giảm tải trước khi đụng đến server riêng.

Thứ tự nên làm gọn lại
- Backup database (luôn làm trước mọi thay đổi).
- Dọn transient hết hạn, rồi rà các option autoload nặng bất thường.
- Bật HPOS và đồng bộ đơn hàng, kiểm tra khớp dữ liệu.
- Tối ưu tốc độ tổng thể (cache trang, ảnh, query) — xem cách tăng tốc shop WooCommerce.
- Chỉ tách database vật lý khi các bước trên đã làm mà vẫn nghẽn.
Câu hỏi thường gặp
Bật HPOS có làm mất đơn hàng cũ không?
Không, nếu bạn backup trước và để WooCommerce đồng bộ xong. HPOS chép đơn sang bảng mới chứ không xoá dữ liệu cũ, và bạn vẫn có thể tắt đi để quay về cách lưu cũ khi còn ở chế độ đồng bộ.
Xoá transient có ảnh hưởng gì đến shop không?
Transient chỉ là bộ đệm tạm, xoá đi WooCommerce và các plugin sẽ tự tạo lại khi cần. Tác động duy nhất là vài request đầu sau khi xoá sẽ hơi chậm hơn một chút rồi trở lại bình thường.
Shop nhỏ vài trăm đơn có cần tách database không?
Chưa cần. Ở quy mô đó, bật HPOS và dọn wp_options là đủ. Tách database vật lý chỉ đáng làm khi đơn hàng và lượt truy cập lớn đến mức database trở thành điểm nghẽn thật sự.
Dịch vụ liên quan
Thiết kế website để khách dễ tìm thông tin, bạn dễ quản trị và mở rộng Web22 nhận thiết kế website cho cá nhân, cửa hàng và doanh nghiệp cần giới thiệu, bán hàng hoặc tiếp nhận yêu…Cùng chủ đề WooCommerce
Đang tính làm website hoặc muốn web đang chạy nhanh hơn? Nhắn cho Web22 một câu là được.