Какие таблицы следует очищать при очистке кэша базы данных вручную?

13

До D8 для очистки кэша вручную можно было обрезать все таблицы, начиная с cache_.

В Drupal 8 все еще есть таблицы, начинающиеся с cache_, но есть и cachetagsтаблица.

Совет в D8 все еще урезать, cache_*если вам нужно очистить кеш вручную? Безопасно ли / необходимо / рекомендуется усекать cachetagsтаблицу вместе с cache_*таблицами?

Я знаю, что могут быть модули contrib, которые делают вещи по-другому, меня больше всего интересует, что делает ядро, и что считается «лучшей практикой» для Drupal 8 в целом.

Клайв
источник
Вы можете просто посмотреть, что делает кнопка очистки кеша.
Эяль
Все кеш-таблицы безопасны для усечения, но не удалили их полностью.
hamza.gt

Ответы:

6

В Drupal 8, если вы ищете безопасные таблицы, которые необходимо очистить вручную, очистите таблицы, начиная с cache_, а также обрежьте таблицу cachetags.

Если вы используете drush, используйте эту команду для очистки

Drush кэш-перестроить

Рахул Мишра
источник
3

В соответствии с этой статьей cachetags устанавливаются, когда объекты кэша хранятся, поэтому будет безопасно также урезать эту таблицу. Кештеги идентифицируют объекты кеша, и вы можете получить все связанные объекты одновременно.

Пол Бениш
источник
Я проверил, и таблица может быть усечена без проблем (или только с потенциальной проблемой производительности). Он воссоздается при загрузке объекта, но ... я не знаю, почему, если вы удаляете экземпляр объекта, теги, сохраненные в кеш-тегах, уже находятся в таблице. Я думаю, что это должно быть удалено.
estoyausente
Я предполагаю, что данные из таблицы cachetags удаляются при запуске cron, а то, что вы видите после удаления сущностей, - это просто остатки
Paul Bönisch
0

Это очень удобно. Замените dbname при необходимости:

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};
Андре
источник
0

Вы можете сделать это для однострочника:

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

Добавьте столько префикса cache_, сколько захотите.

Дэн
источник