Quá lớn wp_woocommerce_sessions trong Cơ sở dữ liệu [Cách khắc phục]

Như tôi đã nói trong các bài báo khác, WooCommerce nó là một mô-đun ngày càng mạnh mẽ và linh hoạt, có thể chuyển đổi WordPress trong một Cửa hàng trực tuyến lý tưởng cho một doanh nghiệp mới thành lập.

Đối với một cửa hàng trực tuyến có quy mô modeste WooCommerce nó cũng có thể chạy trên "shared hosting", có thể dễ dàng hỗ trợ 5.000 sản phẩm / 100 đơn hàng mỗi ngày, nếu chủ đề được sử dụng không tiêu tốn nhiều tài nguyên và bạn không lạm dụng các mô-đun (plugin) khác.

Tối ưu hóa mã nguồn Chủ đề WP, mô-đun (WP Plugins) và tối ưu hóa cơ sở dữ liệu cũng có hai khía cạnh mà chúng ta cần phải rất cẩn thận.

Tôi nhận thấy một ngày khác rằng một cửa hàng trực tuyến có kích thước modenó bắt đầu tiêu tốn rất nhiều tài nguyên RAM và CPU trên một máy chủ chuyên dụng hào phóng. Việc tiêu thụ nhiều tài nguyên này dẫn đến tăng "tải" trên máy chủ và thời gian tải các trang cửa hàng onine lâu hơn.

Khi chúng tôi nhận thấy lượng tải cao không đáng có trên máy chủ web, tốt hơn hết là bạn nên điều tra kỹ nguyên nhân trước khi thực hiện bất kỳ hành động nào.

Trong cơ sở dữ liệu, tôi nhận thấy rằng bảng "wp_woocommerce_sessions“Nó rất lớn. Nó có hơn 6 GB. Một khối lượng lớn cho một bảng trong cơ sở dữ liệu mà tổng số thường không vượt quá 100 MB.

wp_ là gìwoocommerce_phiên?

Như chúng ta có thể đoán từ tên của anh ấy, bảng "wp_woocommerce_sessions”Chứa các phiên PHP (Phiên PHP).
Các phiên này là hành động của người dùng trang web (hoặc rô-bốt web) và hầu hết thời gian họ truy cập cơ sở dữ liệu thông qua cookie. Trong wp_woocommerce_sessions được lưu trữ dữ liệu về các sản phẩm được người dùng đặt trong giỏ hàng, phiếu giảm giá, phí vận chuyển, dữ liệu khách hàng và nhiều thông tin khác liên quan đến quá trình đặt hàng sản phẩm.

Các phiên này được tạo cho dù người dùng có đăng ký trên trang web hay không và thông thường sẽ tự động hết hạn và xóa sau một thời gian.

Thật không may, không phải lúc nào các phiên này cũng bị xóa và trong một số trường hợp, chúng vẫn được lưu trữ vĩnh viễn trong wp_woocommerce_sessions, làm cho bảng này đạt được một khối lượng khá lớn.

Làm cách nào để chúng tôi xóa bảng wp_woocommerce_sessions từ SQL?

1. Tới Bảng Điều Khiển (Dashboard) →  WooCommerce →  Trạng thái →  CÔNG CỤ  (chuyển hướng).

2. Cuộn xuống tùy chọn "Xóa các phiên khách hàng“. Cẩn thận! Xóa phiên khách hàng có nghĩa là xóa tất cả các sản phẩm họ đưa vào giỏ hàng. Nếu trong khi xóa các phiên này mà có khách hàng có sản phẩm trong giỏ hàng, họ sẽ biến mất và đơn đặt hàng trực tuyến có thể sẽ không được hoàn thành.

3. Nhấp vào "Clear" và xác nhận hoạt động.

Tại thời điểm này, bảng "wp_woocommerce_sessions" trống, vì vậy tất cả các phiên mua sắm của khách hàng đã bị xóa.

Vấn đề còn lâu mới được giải quyết. bảng SQL wp_woocommerce_sessions sẽ thu thập lại dữ liệu trong đó và theo mặc định, nó sẽ lấy lại tỷ lệ, điều này là không mong muốn.

Làm cách nào để chúng tôi ngăn phiên khách hàng được lưu trữ vĩnh viễn trong WooCommerce – wp_woocommerce_sessions?

Tôi đã chỉ ra ở trên cách bảng "wp_woocommerce_sessions" khỏi cơ sở dữ liệu, nhưng sự cố sẽ lại xuất hiện sau một vài ngày khi các phiên máy khách sẽ tập hợp lại.

Trước WooCommerce 2.5, phiên máy khách được ghi lại thông qua cookie, sẽ được lưu vào bảng sau WordPress "wp_options".
Đối với các cửa hàng lớn hơn, phương pháp này thường dẫn đến thảm họa. “Wp_options”Là bàn quan trọng của WordPress, được sử dụng bởi các tùy chọn và cài đặt chung. Xác định và xóa thủ công các phiên khách hàng được lưu trữ trong wp_options đó không phải là một công việc dễ dàng.
Hiệu suất WooCommerce chúng không phải là tốt nhất và khả năng mở rộng theo thời gian là một điểm nhạy cảm.

Với sự ra mắt WooCommerce 2.5 vào năm 2015, các nhà phát triển WooCommerce đã giới thiệu một hệ thống lưu trữ và xử lý phiên mới WooCommerceDựa trên Trình quản lý phiên WP. Hệ thống này dẫn đến sự xuất hiện wp_woocommerce_sessions. Một bảng dành riêng cho các phiên khách, mà trong cơ sở dữ liệu không tương tác với các bảng khác. Trong trường hợp có sai sót lớn, tổn thất nên được giảm thiểu.

Theo những gì tôi quan sát được, các cửa hàng trực tuyến đã ra mắt trước đây WooCommerce 2.5 và đã nhận được các bản cập nhật liên tục theo thời gian, có một số vấn đề liên quan đến việc tự động xóa các phiên máy khách. Rất có thể đó là một lỗi xuất hiện trên phiên bản mới hơn của WooCommerce 2.5 hoặc plugin WordPress / WooCommerce mà đã không theo kịp với các bản cập nhật.

Trong trường hợp của tôi, đó là xung đột với một chức năng được thêm vào tệp functions.php của chủ đề và cái nào ngăn tự động xóa sau một thời gian các phiên hết hạn từ woocommerce_sessions.
Nếu bạn phải đối mặt với một vấn đề như vậy, bạn phải điều tra cẩn thận tất cả các nguyên nhân có thể. Lỗi SQL, quyền SQL, Cron Job, xung đột với các plugin khác và cuối cùng nhưng không kém phần quan trọng kiểm tra các thay đổi do bạn thực hiện trong mã theo thời gian.

tôi đã thấy điều đó WooCommerce cung cấp chỉ với 29 đô la một plugin có khả năng quản lý các phiên khách hàng. "Xóa giỏ hàng và phiên cho WooCommerce“. Tất nhiên, ngoài việc xóa các phiên theo lịch trình, mô-đun có một số công cụ có thể giúp bạn.

Một lựa chọn đơn giản hơn đã lên lịch xóa “woocommerce_sessions”Vào khoảng thời gian một ngày, có sẵn với mã sau trong functions.php:

// clean cart every day
if (!wp_next_scheduled('cron_wc_clean_cart')) {
    wp_schedule_event( time(), 'daily', 'cron_wc_clean_cart' );
}

add_action ( 'cron_wc_clean_cart', 'wc_clean_session_cart' );
function wc_clean_session_cart() {
    global  $wpdb;

    $wpdb->query( "TRUNCATE {$wpdb->prefix}woocommerce_sessions" );
    $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key='_woocommerce_persistent_cart_" . get_current_blog_id() . "';" );
    wp_cache_flush();
}

Để lại bình luận nếu bạn cần trợ giúp hoặc có giải pháp khác.

Là người yêu công nghệ, tôi rất vui được viết tại StealthSettings.com từ năm 2006. Tôi có kinh nghiệm đa dạng với các hệ điều hành: macOS, Windows và Linux, cũng như trong các ngôn ngữ lập trình và nền tảng blogging (WordPress) và cửa hàng trực tuyến (WooCommerce, Magento, PrestaShop).

Làm thế nào để » Chỉnh sửa và tấn công » Quá lớn wp_woocommerce_sessions trong Cơ sở dữ liệu [Cách khắc phục]

1 suy nghĩ về “Quá lớn wp_woocommerce_sessions trong Cơ sở dữ liệu [Cách khắc phục]"

  1. Tôi không có cách nào để xóa dữ liệu nặng 500mb và tôi có giới hạn 1000mb mỗi phút để xóa mọi thứ bị lấp đầy hoàn toàn một lần nữa… .có giải pháp nào không?

    đáp lại
Để lại một bình luận