Wp_woocommerce_sessions demasiado grande en la base de datos [Cómo solucionarlo]

Como dije en otros artículos, WooCommerce es un módulo cada vez más robusto y flexible, capaz de convertir WordPress en un Tienda online ideal para una empresa de nueva creación.

Para una tienda en línea modesta, WooCommerce se puede ejecutar en un "alojamiento compartido" y puede admitir fácilmente 5.000 productos / 100 pedidos por día, si el tema utilizado no consume muchos recursos y no abusa de otros módulos (complementos).

Optimización del código fuente Temas de WP, módulos (complementos de WP) y optimización de la base de datos También hay dos aspectos sobre los que debemos tener mucho cuidado.

Noté el otro día que está comenzando una modesta tienda en línea consumir una gran cantidad de recursos de RAM y CPU en un servidor dedicado generoso. Este alto consumo de recursos provocó una mayor "carga" en el servidor y un largo tiempo de carga de las páginas de la tienda en línea.

Cuando notamos una carga injustificadamente alta en un servidor web, es bueno investigar cuidadosamente las causas antes de tomar cualquier medida.

En la base de datos noté que la tabla "wp_woocommerce_sessions"Es enorme. Tenía más de 6 GB. Un volumen enorme para una tabla en una base de datos que normalmente no superaba los 100 MB en total.

¿Qué es wp_woocommerce_sessions?

Como podemos adivinar por su nombre, la mesa "wp_woocommerce_sessions"Contiene sesiones de PHP (Sesiones PHP).
Estas sesiones son acciones de los usuarios del sitio (o de los robots web) y la mayoría de las veces llegan a la base de datos a través de cookies. En wp_woocommerce_sessions se almacenan datos sobre los productos puestos por los usuarios en el carrito de compras, cupones, tarifas de envío, datos de clientes y mucha otra información relacionada con el proceso de pedido de productos.

Estas sesiones se crean tanto si el usuario está registrado en el sitio como si no y normalmente caducan y se eliminan automáticamente después de un tiempo.

Desafortunadamente, no siempre es el caso de que estas sesiones se eliminen y, en algunos casos, permanecen almacenadas permanentemente en wp_woocommerce_sessions, lo que hace que esta tabla sea bastante grande.

Cómo borrar la tabla wp_woocommerce_sessions de SQL?

1. ir a Escritorio →  WooCommerce →  Estado →  Las herramientas (pestaña).

2. Desplácese hacia abajo hasta la opción "Sesiones claras para los clientes“. ¡Cuidadoso! Eliminar sesiones de clientes significa eliminar todos los productos que pusieron en el carrito de compras. Si al eliminar estas sesiones hay clientes que tienen productos en el carrito, estos desaparecerán y no se completará el posible pedido online.

3. Haga clic en "Borrar" y confirme la operación.

En este punto, la tabla "wp_woocommerce_sessions" está vacía, por lo que se han eliminado todas las sesiones de compras de los clientes.

El problema está lejos de resolverse. La tabla SQL wp_woocommerce_sessions recopilará datos en ella nuevamente y, de forma predeterminada, volverá a ganar proporciones, lo que no es deseable.

¿Cómo evitamos que las sesiones de los clientes se almacenen permanentemente en WooCommerce? wp_woocommerce_sessions?

Hemos mostrado anteriormente cómo se puede vaciar la tabla "wp_woocommerce_sessions" de la base de datos, pero el problema volverá a aparecer después de unos días, cuando las sesiones de los clientes se vuelvan a reunir.

Antes de WooCommerce 2.5, las sesiones de los clientes se capturaban a través de cookies, que luego se guardaban en la tabla de WordPress ".wp_options".
Para las tiendas más grandes, este método a menudo ha provocado desastres. "Wp_options" es una tabla vital de WordPress, utilizada por opciones y configuraciones generales. Identificar y eliminar manualmente las sesiones de cliente almacenadas en wp_options no fue un trabajo fácil.
El rendimiento de WooCommerce no fue el mejor y la escalabilidad a lo largo del tiempo fue un punto sensible.

Con el lanzamiento de WooCommerce 2.5 en 2015, los desarrolladores de WooCommerce han introducido un nuevo sistema de almacenamiento y manejo de sesiones de WooCommerce, basado en Gerente de sesiones de WP. Este sistema condujo a la aparición wp_woocommerce_sessions. Una tabla dedicada para sesiones de cliente, que en la base de datos no interactúa con otras tablas. En caso de errores importantes, las pérdidas deben ser mínimas.

Por lo que he notado, las tiendas en línea lanzadas antes de WooCommerce 2.5 y que han recibido actualizaciones constantes a lo largo del tiempo, tienen algunos problemas con la eliminación automática de las sesiones de los clientes. Lo más probable es que se trate de un error que apareció en una versión más reciente de WooCommerce 2.5 o un complemento de WordPress / WooCommerce que no se mantuvo al día con las actualizaciones.

En mi caso, fue un conflicto con una función agregada al archivo functions.php del tema, y ​​que evita la eliminación automática después de un tiempo de sesiones caducadas de woocommerce_sessions.
Si se enfrenta a un problema de este tipo, debe investigar detenidamente todas las causas posibles. Error de SQL, permisos de SQL, Cron Job, conflictos con otros complementos y, por último, pero no menos importante, verifique los cambios realizados por usted en el código a lo largo del tiempo.

Vimos que WooCommerce ofrece por solo $ 29 un complemento capaz de administrar las sesiones de los clientes. "Borrar carrito y sesiones para WooCommerce“. Eso sí, además del borrado programado de sesiones, el módulo cuenta con varias herramientas que podrían ayudarte.

Una opción más sencilla eliminación programada de "woocommerce_sessions"A intervalos de un día, está disponible con el siguiente código en 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();
}

Deja un comentario si necesitas ayuda o tienes otra solución.

Apasionado de la tecnología, me gusta probar y escribir tutoriales sobre sistemas operativos. macOS, Linux, Windows, sobre la configuración del servidor web WordPress, WooCommerce y LEMP (Linux, NGINX, MySQL y PHP). Escribo en StealthSettings.com desde 2006, y unos años más tarde comencé a escribir en iHowTo.Tips tutoriales y noticias sobre dispositivos en el ecosistema Apple: iPhoneiPad Apple Reloj, HomePod, iMac, MacBook, AirPods y accesorios.

Deja un comentario