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

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

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

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

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

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

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

τι είναι wp_woocommerce_συνεδρίες ;

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

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

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

Πώς να διαγράψετε τον πίνακα wp_woocommerce_sessions από 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. Αυτό το σύστημα οδήγησε στην εμφάνιση wp_woocommerce_sessions. Ένας αποκλειστικός πίνακας για συνεδρίες πελατών, ο οποίος στη βάση δεδομένων δεν αλληλεπιδρά με άλλους πίνακες. Σε περίπτωση σοβαρών σφαλμάτων, οι απώλειες πρέπει να είναι ελάχιστες.

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

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

το είδα αυτό 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();
}

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

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

πώς να » Tweaks & Hacks » Πολύ μεγάλο wp_woocommerce_sessions στη βάση δεδομένων [Πώς να διορθώσετε]

1 σκέψη σχετικά με “Πολύ μεγάλο wp_woocommerce_sessions στη βάση δεδομένων [Πώς να διορθώσετε]"

  1. Δεν έχω τρόπο να διαγράψω τα δεδομένα ζυγίζει 500mb και έχω όριο 1000mb ανά λεπτό για να διαγράψω όλα γεμίζουν και πάλι… .κάποια λύση;

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