Lentidão no Checkout do Magento 2: O Assassino da Tabela Quote
Sua loja Magento 2 tem um assassino de performance silencioso. Ele vive no seu banco de dados.
As tabelas quote e quote_item crescem toda vez que um cliente adiciona um produto ao carrinho. Se eles não comprarem, o registro permanece. Ao longo de meses, essas tabelas atingem milhões de linhas.
Uma vez vi uma loja com 15 milhões de linhas na tabela quote. A velocidade do checkout caiu de 1,2 segundos para 8 segundos. O lojista não tinha ideia do porquê. O frontend estava em cache, então tudo parecia bem até que o checkout falhasse.
Tabelas de quote grandes causam estes problemas:
- Carregamento lento da página do carrinho devido a joins pesados no banco de dados.
- Chamadas AJAX de checkout lentas para frete e totais.
- Criação de pedidos no admin mais lenta.
- Tempos de backup e recuperação de banco de dados mais longos.
- Alta pressão de memória no PHP-FPM.
Como corrigir:
Meça o dano Verifique a contagem de linhas e o tamanho das tabelas. Procure pela contagem de stale_inactive. Estes são carrinhos abandonados com mais de 30 dias. Eles não servem para nada, exceto para deixar suas queries mais lentas.
Arquive antes de deletar Não delete milhões de linhas de uma só vez. Isso irá travar suas tabelas e derrubar seu banco de dados. Primeiro, crie tabelas de arquivo e mova as quotes inativas com mais de 90 dias para elas.
Use deleções em lotes Delete as linhas em pequenos blocos de 10.000. Isso evita travamentos longos de tabela. Sempre delete as tabelas filhas primeiro para respeitar os relacionamentos de chave estrangeira. A ordem deve ser:
- quote_item_option
- quote_address_item
- quote_shipping_rate
- quote_payment
- quote_address
- quote_item
- quote
Otimize e Indexe Execute OPTIMIZE TABLE para recuperar espaço em disco. Adicione índices compostos para ajudar o banco de dados a encontrar quotes ativas mais rapidamente. Por exemplo, adicione um índice em (is_active, updated_at).
Automatize a limpeza Use o comando Magento CLI: bin/magento sales:cleanQuotes. Configure um cron job para executar isso semanalmente durante períodos de baixo tráfego.
Dica de Especialista: Carrinhos de convidados (guest carts) causam o maior inchaço. Reduza o tempo de vida da quote de convidado para 7 dias em sua configuração. Isso mantém seu banco de dados enxuto sem prejudicar clientes reais.
Um cliente viu o tempo de carregamento do seu checkout cair de 6,5s para 1,4s usando estes passos. Eles também recuperaram 9GB de espaço no banco de dados.
Mantenha suas tabelas de quote pequenas para manter suas taxas de conversão altas.
