¿Qué tablas se deben vaciar cuando se borra manualmente el caché almacenado en la base de datos?

13

Antes de D8 a borrar la memoria caché de forma manual uno podría truncar todas las tablas que comienzan con cache_.

En Drupal 8 todavía hay tablas que comienzan con cache_, pero también hay una cachetagstabla.

¿El consejo en D8 aún debe truncarse cache_*si necesita borrar el caché manualmente? ¿Es seguro / requerido / recomendado truncar la cachetagstabla junto con las cache_*tablas?

Soy consciente de que puede haber módulos contrib que hacen las cosas de manera diferente, estoy interesado principalmente en lo que hace el núcleo y en lo que se considera la "mejor práctica" para Drupal 8 en general.

Clive
fuente
Puede ver lo que hace el botón borrar todo el caché.
Eyal
Todas las tablas de caché son seguras para truncar, aunque no las eliminó por completo.
hamza.gt

Respuestas:

6

En drupal 8, si está buscando las tablas seguras que deben borrarse manualmente, borre las tablas que comienzan con cache_ y también trunca la tabla cachetags.

Si está utilizando drush, use este comando para borrar el caché.

drush-reconstrucción de caché

Rahul Mishra
fuente
3

De acuerdo con este artículo, cachetags se configuran cuando se almacenan objetos de caché, por lo que también debería ser seguro truncar esta tabla. Los caché identifican los objetos de caché y puede obtener todos los objetos relacionados a la vez.

Paul Bönisch
fuente
Probé y la tabla se puede truncar sin problemas (o solo con el posible problema de rendimiento). Se vuelve a crear cuando se carga la entidad, pero ... No sé por qué si elimina una instancia de entidad, las etiquetas guardadas en las etiquetas de caché ya están en la tabla. Creo que tiene que ser eliminado.
estoyausente
Supongo que los datos de la tabla de caché se eliminan en la ejecución cron y lo que ves después de la eliminación de la entidad son solo restos
Paul Bönisch
0

Esto es muy útil. Reemplace dbname según sea necesario:

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é
fuente
0

Podrías hacer esto por una frase:

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

Agregue tantos con el prefijo cache_ como desee.

Dan
fuente