Πολύ μεγάλες WP_WOOCOMPERCE_SESSIONS στη βάση δεδομένων [Πώς να διορθώσετε]

Όπως είπα σε άλλα άρθρα, το WooCommerce είναι μια ολοένα πιο ισχυρή και ευέλικτη ενότητα, ικανή να μετατρέψει το WordPress σε ιδανικό ηλεκτρονικό κατάστημα για μια επιχείρηση στην αρχή.

Για ένα ηλεκτρονικό κατάστημα μικρού μεγέθους, το WooCommerce μπορεί επίσης να εκτελεστεί σε ένα “κοινόχρηστη φιλοξενία”, έχοντας τη δυνατότητα να υποστηρίξετε εύκολα 5.000 προϊόντα / 100 παραγγελίες την ημέρα, εάν το θέμα που χρησιμοποιείται δεν καταναλώνει πολλούς πόρους και δεν κάνετε κατάχρηση άλλων ενοτήτων (πρόσθετα).

Βελτιστοποίηση πηγαίου κώδικα από το θέμα (Θέματα WP), ενότητες (Πρόσθετα WP) και βελτιστοποίηση βάσης δεδομένων Υπάρχουν επίσης δύο πτυχές στις οποίες πρέπει να είμαστε πολύ προσεκτικοί.

Παρατήρησα τις προάλλες ότι ξεκινά ένα μικρό ηλεκτρονικό κατάστημα καταναλώνουν τεράστιες ποσότητες πόρων RAM και CPU σε έναν αποκλειστικό διακομιστή γενναιόδωρος. Αυτή η υψηλή κατανάλωση πόρων οδήγησε έμμεσα σε α “φορτίο” αυξήθηκε στον διακομιστή και μεγάλος χρόνος φόρτωσης των σελίδων του ηλεκτρονικού καταστήματος.

Όταν παρατηρούμε αδικαιολόγητα υψηλό φόρτο σε έναν web server, καλό είναι να διερευνήσουμε προσεκτικά τα αίτια, πριν λάβουμε οποιοδήποτε μέτρο.

Στη βάση δεδομένων παρατήρησα ότι ο πίνακας “wp_woocommerce_sessions” είναι εξαιρετικά μεγάλο. Ήταν πάνω από 6 GB. Ένας τεράστιος όγκος για έναν πίνακα σε μια βάση δεδομένων που κανονικά δεν ξεπερνούσε τα 100 MB συνολικά.

Τι είναι το wp_woocommerce_sessions;

Όπως μπορούμε να καταλάβουμε από το όνομά του, ο πίνακας “wp_woocommerce_sessions” περιέχει συνεδρίες PHP (Συνεδρίες PHP).
Αυτές οι συνεδρίες είναι ενέργειες χρηστών του ιστότοπου (ή ρομπότ Ιστού) και τις περισσότερες φορές καταλήγουν στη βάση δεδομένων μέσω cookies. Στο wp_woocommerce_sessions, αποθηκεύονται δεδομένα σχετικά με τα προϊόντα που τοποθετούν οι χρήστες στο καλάθι αγορών, κουπόνια, έξοδα αποστολής, δεδομένα πελατών και πολλές άλλες πληροφορίες που σχετίζονται με τη διαδικασία παραγγελίας προϊόντων.

Αυτές οι συνεδρίες δημιουργούνται ακόμα και αν ο χρήστης είναι εγγεγραμμένος στον ιστότοπο ή όχι και κανονικά πρέπει να λήξουν και να διαγραφούν αυτόματα μετά από λίγο.

Δυστυχώς, δεν συμβαίνει πάντα αυτές οι περίοδοι σύνδεσης να διαγράφονται και, σε ορισμένες περιπτώσεις, να παραμένουν μόνιμα αποθηκευμένες στο wp_woocommerce_sessions, γεγονός που κάνει αυτόν τον πίνακα να φτάσει σε αρκετά μεγάλο όγκο.

Πώς διαγράφουμε τον πίνακα; wp_woocommerce_sessions din SQL;

1. Πηγαίνουμε ΤαμπλόWoocommerceΚατάστασηΕργαλεία (αυτί).

2. Κάντε κύλιση προς τα κάτω στην επιλογή “Εκκαθάριση συνεδριών πελατών“. Προσεκτικός! Η διαγραφή περιόδων σύνδεσης πελατών σημαίνει διαγραφή όλων των προϊόντων που έχουν τοποθετηθεί από αυτούς στο καλάθι αγορών. Εάν ενώ διαγράφετε αυτές τις περιόδους σύνδεσης υπάρχουν πελάτες που έχουν προϊόντα στο καλάθι, θα εξαφανιστούν και η πιθανή ηλεκτρονική παραγγελία δεν θα ολοκληρωθεί.

3. Κάντε κλικ “Σαφής” και επιβεβαιώστε τη λειτουργία.

Αυτή τη στιγμή το τραπέζι “wp_woocommerce_sessions” είναι κενό, επομένως όλες οι περίοδοι σύνδεσης αγορών πελατών έχουν διαγραφεί.

Το πρόβλημα απέχει πολύ από το να λυθεί. Ο πίνακας SQL wp_woocommerce_sessions θα συλλέξει ξανά δεδομένα σε αυτόν και από προεπιλογή θα πάρει ξανά αναλογίες, κάτι που δεν είναι επιθυμητό.

Πώς εμποδίζουμε τη μόνιμη αποθήκευση των συνεδριών πελατών στο WooCommerce – wp_woocommerce_sessions;

Έδειξα παραπάνω πώς μπορεί να αδειάσει το τραπέζι “wp_woocommerce_sessions” από τη βάση δεδομένων, αλλά το πρόβλημα θα εμφανιστεί ξανά μετά από μερικές ημέρες, όταν θα συγκεντρωθούν ξανά οι περίοδοι λειτουργίας πελάτη.

Πριν από το WooCommerce 2.5, οι περίοδοι σύνδεσης πελατών καταγράφονταν μέσω cookie και στη συνέχεια αποθηκεύονταν στον πίνακα του WordPress “wp_options“.
Για μεγαλύτερα καταστήματα, αυτή η μέθοδος συχνά οδηγούσε σε καταστροφές. “wp_options” είναι ο ζωτικός πίνακας του WordPress, που χρησιμοποιείται από επιλογές και γενικές ρυθμίσεις. Αναγνώριση και μη αυτόματη διαγραφή περιόδων σύνδεσης πελατών που είναι αποθηκευμένες σε wp_options δεν ήταν ακριβώς εύκολη δουλειά.
Η απόδοση του WooCommerce δεν ήταν η καλύτερη και η επεκτασιμότητα με την πάροδο του χρόνου ήταν ένα ευαίσθητο σημείο.

Με την κυκλοφορία του WooCommerce 2.5 το 2015, οι προγραμματιστές του WooCommerce εισήγαγαν ένα νέο σύστημα για το χειρισμό και την αποθήκευση συνεδριών WooCommerce, βασισμένο σε WP Sessions Manager. Αυτό το σύστημα οδήγησε στην εμφάνιση wp_woocommerce_sessions. Ένας ειδικός πίνακας για περιόδους σύνδεσης πελατών, ο οποίος στη βάση δεδομένων δεν πρέπει να αλληλεπιδρά με άλλους πίνακες. Σε περίπτωση σοβαρών σφαλμάτων, οι απώλειες πρέπει να είναι ελάχιστες.

Από ό,τι έχω παρατηρήσει, τα ηλεκτρονικά καταστήματα που κυκλοφόρησαν πριν από το WooCommerce 2.5 και τα οποία λάμβαναν συνεχείς ενημερώσεις με την πάροδο του χρόνου, έχουν κάποια προβλήματα σχετικά με την αυτόματη διαγραφή των περιόδων σύνδεσης πελατών. Είναι πιθανότατα ένα σφάλμα που εμφανίστηκε σε μια νεότερη έκδοση του WooCommerce 2.5 ή σε μια προσθήκη WordPress / WooCommerce που δεν συμβαδίζει με τις ενημερώσεις.

Στην περίπτωσή μου ήταν μια διένεξη με μια συνάρτηση που προστέθηκε στο αρχείο functions.php του θέματος, και το οποίο αποτρέπει την αυτόματη διαγραφή μετά από μια περίοδο λήξεως από woocommerce_sessions.
Εάν αντιμετωπίζετε ένα τέτοιο πρόβλημα, πρέπει να διερευνήσετε προσεκτικά όλες τις πιθανές αιτίες. Σφάλμα SQL, δικαιώματα SQL, Cron Job, διενέξεις με άλλα πρόσθετα και τέλος, ελέγξτε τις αλλαγές που έχετε κάνει στον κώδικα με την πάροδο του χρόνου.

Είδα ότι το WooCommerce προσφέρει μόνο με 29 $ ένα πρόσθετο ικανό να διαχειρίζεται συνεδρίες πελατών. “Εκκαθάριση καλαθιού και συνεδριών για WooCommerce“. Φυσικά, εκτός από την προγραμματισμένη διαγραφή περιόδων σύνδεσης, η ενότητα έχει πολλά εργαλεία που θα μπορούσαν να σας βοηθήσουν.

Μια απλούστερη επιλογή του προγραμματισμένη διαγραφή α “woocommerce_sessions” σε διαστήματα μιας ημέρας, είναι διαθέσιμο με τον παρακάτω κωδικό στο 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();
}

Αφήστε ένα σχόλιο εάν χρειάζεστε βοήθεια ή έχετε άλλη λύση.

Παθιασμένος με την τεχνολογία, γράφω με ευχαρίστηση στο stealthsetts.com ξεκινώντας από το 2006. Έχω μια πλούσια εμπειρία στα λειτουργικά συστήματα: MacOs, Windows και Linux, αλλά και σε γλώσσες προγραμματισμού και πλατφόρμες blogging (WordPress) και για ηλεκτρονικά καταστήματα (WooCommerce, Magento, Presashop).

Home Η πηγή σας σε μαθήματα, χρήσιμες συμβουλές και νέα. Πολύ μεγάλες WP_WOOCOMPERCE_SESSIONS στη βάση δεδομένων [Πώς να διορθώσετε]

1 Σκέφτηκα "Πολύ μεγάλες WP_WOOCOMPERCE_SESSIONS στη βάση δεδομένων [Πώς να διορθώσετε]”

  1. Δεν έχω τρόπο να διαγράψω τα δεδομένα. Ζυγίζει 500MB και έχω όριο τα 1000MB. Τη στιγμή που θα διαγράψω τα πάντα, γεμίζουν ξανά εντελώς.….κάποια λύση;

    Απάντηση
Αφήστε ένα σχόλιο