Quais tabelas devem ser esvaziadas ao limpar manualmente o cache armazenado no banco de dados?

13

Antes do D8 para limpar o cache manualmente, era possível truncar todas as tabelas começando com cache_.

No Drupal 8, ainda existem tabelas começando com cache_, mas também há uma cachetagstabela.

O conselho do D8 ainda está truncado cache_*se você precisar limpar o cache manualmente? É seguro / obrigatório / recomendado truncar a cachetagstabela junto com as cache_*tabelas?

Estou ciente de que pode haver módulos de contribuição que fazem as coisas de maneira diferente, estou mais interessado no que o núcleo faz e no que é considerado "melhor prática" para o Drupal 8 em geral.

Clive
fonte
Você pode apenas ver o que limpar todos os botões de cache.
Eyal
Todas as tabelas de cache são seguras para truncar, embora não as removam completamente.
hamza.gt

Respostas:

6

No drupal 8, se você estiver procurando pelas tabelas seguras que precisam ser limpas manualmente, limpe as tabelas começando com cache_ e também trunque a tabela cachetags também.

Se você estiver usando drush, use este comando para limpar cache-

drush cache-reconstruir

Rahul Mishra
fonte
3

De acordo com este artigo, cachetags são definidos quando objetos de cache estão sendo armazenados, portanto, deve ser seguro também truncar esta tabela. As marcas de cache identificam objetos de cache e você pode obter todos os objetos relacionados de uma só vez.

Paul Bönisch
fonte
Testei e a tabela pode ser truncada sem problemas (ou apenas com o potencial problema de desempenho). Ele é recriado quando a entidade é carregada, mas ... Não sei por que, se você excluir uma instância de entidade, as tags salvas nas tags de cache já estarão na tabela. Eu acho que tem que ser removido.
estoyausente 14/10
Presumo dados da tabela cachetags são removen no cron prazo eo que você vê após a remoção entidade são apenas sobras
Paul Bönisch
0

Isso é muito útil. Substitua dbname conforme necessário:

DB_NAME="dbname"

mysql -uroot -proot --execute="SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '${DB_NAME}' AND TABLE_NAME LIKE '%cache%'" | sed 1d | mysql -uroot -proot ${DB_NAME};
André
fonte
0

Você pode fazer isso para uma linha:

drush sqlq "TRUNCATE cache_default;TRUNCATE cache_bootstrap;TRUNCATE cache_container;TRUNCATE cache_discovery;TRUNCATE cache_data;" -l <uri> --no-interaction

Adicione quantos quiser com o prefixo cache_.

Dan
fonte