As alterações no banco de dados não são refletidas na loja
Este artigo fornece soluções para evitar atrasos ou interrupções nas atualizações de entidade que estão sendo aplicadas. Isso inclui como evitar que tabelas de log de alterações fiquem superdimensionadas e como configurar gatilhos de tabela MySQL.
Produtos e versões afetados:
- Adobe Commerce na infraestrutura em nuvem 2.2.x, 2.3.x
- Adobe Commerce no local 2.2.x, 2.3.x
Problema
As alterações feitas no banco de dados não são refletidas na loja ou há um atraso significativo na aplicação das atualizações de entidade. As entidades que podem ser afetadas incluem produtos, categorias, preços, estoque, regras de catálogo, regras de vendas e regras de meta.
Causa
Se seus indexadores estiverem configurados para atualizar de acordo com a agenda, o problema poderá ser causado por uma ou mais tabelas com logs de alteração muito grandes ou disparadores MySQL não configurados.
Tabelas de log de alterações superdimensionadas
As tabelas de log de alterações aumentam tanto se o trabalho indexer_update_all_views
não for concluído com êxito várias vezes.
As tabelas de log de alterações são as tabelas de banco de dados nas quais as alterações nas entidades são rastreadas. Um registro é armazenado em uma tabela de log de alterações desde que a alteração não seja aplicada, o que é executado pelo trabalho cron indexer_update_all_views
. Há várias tabelas de log de alterações em um banco de dados Adobe Commerce, elas são nomeadas de acordo com o seguinte padrão: INDEXER_TABLE_NAME + '_cl', por exemplo catalog_category_product_cl
, catalog_product_category_cl
. Você pode encontrar mais detalhes sobre como as alterações são rastreadas no banco de dados no artigo Visão geral da indexação > Mview na documentação do desenvolvedor.
MySQL gatilhos de banco de dados não configurados
Você suspeitaria que os acionadores do banco de dados não estivessem sendo configurados se, após adicionar ou alterar uma entidade (produto, categoria, regra de destino e assim por diante), nenhum registro fosse adicionado à tabela de log de alteração correspondente.
Solução
Evitar que as tabelas de log de alterações sejam superdimensionadas
Certifique-se de que o trabalho cron indexer_update_all_views
seja sempre concluído com êxito.
Você pode usar a seguinte consulta SQL para obter todas as instâncias com falha do trabalho cron indexer_update_all_views
:
select * from cron_schedule where job_code = "indexer_update_all_views" and status
<> "success" and status <> "pending";
Ou você pode verificar seu status nos logs procurando pelas entradas indexer_update_all_views
:
<install_directory>/var/log/cron.log
- para as versões 2.3.1+ e 2.2.8+<install_directory>/var/log/system.log
- para versões anteriores
Redefinir MySQL acionadores de tabela
Para configurar os gatilhos de tabela MySQL ausentes, é necessário redefinir o modo do indexador:
- Alterne para 'Ao salvar'.
- Volte para 'Em programação'.
Use o seguinte comando para executar esta operação.
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
Leitura relacionada
- MySQL as tabelas são muito grandes em nossa base de dados de conhecimento de suporte
- Indexando: Mview em nossa documentação do desenvolvedor
- Práticas recomendadas para modificar tabelas de banco de dados no Manual de implementação do Commerce