por

1

Muito grande wp_wooCommerce_sessions no banco de dados [como consertar]

Muito grande wp_wooCommerce_sessions no banco de dados [como consertar]

1

Como falei em outros artigos, o WooCommerce é um módulo cada vez mais robusto e flexível, capaz de transformar o WordPress em um loja online ideal para um negócio no início.

Para uma loja online de tamanho modesto, o WooCommerce também pode ser executado em um “alojamento partilhado”, podendo suportar facilmente 5.000 produtos / 100 pedidos por dia, se o tema utilizado não consumir muitos recursos e você não abusar de outros módulos (plugins).

Otimização do código-fonte do tema (WP Themes), módulos (WP Plugins) e otimização de banco de dados há também dois aspectos com os quais devemos ter muito cuidado.

Percebi outro dia que uma pequena loja online está abrindo consumir enormes quantidades de recursos de RAM e CPU em um servidor dedicado generoso. Este elevado consumo de recursos levou implicitamente a uma “carregar” aumento no servidor e longo tempo de carregamento das páginas da loja onine.

Quando notamos uma carga excessivamente alta em um servidor web, é bom investigar cuidadosamente as causas, antes de tomar qualquer medida.

No banco de dados notei que a tabela “wp_woocommerce_sessions” é enormemente grande. Tinha mais de 6 GB. Um volume enorme para uma tabela em um banco de dados que normalmente não ultrapassava 100 MB no total.

O que é wp_woocommerce_sessions?

Como podemos intuir pelo seu nome, a mesa “wp_woocommerce_sessions” contém sessões PHP (Sessões PHP).
Essas sessões são ações dos usuários do site (ou robôs web) e na maioria das vezes acabam no banco de dados através de cookies. No wp_woocommerce_sessions são armazenados dados sobre os produtos colocados pelos usuários no carrinho de compras, cupons, taxas de envio, dados do cliente e muitas outras informações relacionadas ao processo de pedido do produto.

Essas sessões são criadas mesmo que o usuário esteja cadastrado no site ou não e normalmente devem expirar e ser excluídas automaticamente após um tempo.

Infelizmente, nem sempre acontece que essas sessões sejam excluídas e, em alguns casos, permanecem armazenadas permanentemente em wp_woocommerce_sessions, o que faz com que esta tabela atinja um volume bastante grande.

Como excluímos a tabela? wp_woocommerce_sessions seu SQL?

1. Entramos PainelWooCommerceStatusFerramentas (guia).

2. Role para baixo até a opção “Limpar sessões do cliente“. Cuidadoso! Excluir sessões de clientes significa excluir todos os produtos colocados por eles no carrinho de compras. Se enquanto elimina estas sessões houver clientes que tenham produtos no carrinho, estes desaparecerão e o possível pedido online não será concluído.

3. Clique “Claro” e confirme a operação.

Neste momento a mesa “wp_wooCommerce_sessions” está vazio, portanto todas as sessões de compras do cliente foram excluídas.

O problema está longe de ser resolvido. A tabela SQL wp_woocommerce_sessions irá coletar dados nela novamente e por padrão voltará a ganhar proporções, o que não é desejável.

Como evitamos que as sessões do cliente sejam armazenadas permanentemente no WooCommerce – wp_woocommerce_sessions?

Mostrei acima como a tabela pode ser esvaziada “wp_wooCommerce_sessions” do banco de dados, mas o problema aparecerá novamente após alguns dias, quando as sessões do cliente serão reunidas novamente.

Antes do WooCommerce 2.5, as sessões dos clientes eram capturadas por meio de cookies e depois salvas na tabela do WordPress “wp_options“.
Para lojas maiores, esse método muitas vezes levava a desastres. “WP_Options” sendo a tabela vital do WordPress, utilizada por opções e configurações gerais. Identificação e exclusão manual de sessões de clientes armazenadas em wp_options não foi exatamente um trabalho fácil.
O desempenho do WooCommerce não foi dos melhores e a escalabilidade ao longo do tempo foi um ponto sensível.

Com o lançamento do WooCommerce 2.5 em 2015, os desenvolvedores do WooCommerce introduziram um novo sistema para lidar e armazenar sessões do WooCommerce, baseado em Gerenciador de sessões WP. Este sistema levou ao surgimento wp_woocommerce_sessions. Uma tabela dedicada para sessões de clientes, que no banco de dados não devem interagir com outras tabelas. Em caso de erros graves, as perdas devem ser mínimas.

Pelo que tenho observado, as lojas online lançadas antes do WooCommerce 2.5 e que receberam atualizações constantes ao longo do tempo, apresentam alguns problemas quanto à exclusão automática de sessões de clientes. Provavelmente é um bug que apareceu em uma versão mais recente do WooCommerce 2.5 ou em um plugin WordPress/WooCommerce que não acompanhou as atualizações.

No meu caso foi um conflito com uma função adicionada ao arquivo functions.php do tema e quais impede a exclusão automática após um tempo de sessões expiradas de woocommerce_sessions.
Se você se deparar com esse problema, deverá investigar cuidadosamente todas as causas possíveis. Erro SQL, permissões SQL, Cron Job, conflitos com outros plugins e por último mas não menos importante, verifique as alterações feitas no código ao longo do tempo.

Vi que o WooCommerce oferece por apenas US$ 29 um plugin capaz de gerenciar sessões de clientes. “Limpar carrinho e sessões para WooCommerce“. Claro que além da exclusão programada de sessões, o módulo possui diversas ferramentas que podem te ajudar.

Uma opção mais simples de exclusão programada a “woocommerce_sessions” em intervalos de um dia, está disponível com o seguinte código em 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();
}

Deixe um comentário se precisar de ajuda ou tiver outra solução.

Muito grande wp_wooCommerce_sessions no banco de dados [como consertar]

Você também pode estar interessado em...

Um pensamento em “Muito grande wp_wooCommerce_sessions no banco de dados [como consertar]

  1. Carlos diz:

    Não tenho como excluir os dados. Ele pesa 500 MB e tenho um limite de 1000 MB. No minuto em que apago tudo, ele fica completamente preenchido novamente.….alguma solução?

Deixe uma resposta

Seu endereço de e-mail não será publicado. Os campos necessários estão marcados *