Które tabele należy opróżnić podczas ręcznego czyszczenia pamięci podręcznej przechowywanej w bazie danych?

13

Przed D8, aby ręcznie wyczyścić pamięć podręczną, można było obciąć wszystkie tabele zaczynające się od cache_.

W Drupal 8 wciąż są stoły zaczynające się od cache_, ale jest też cachetagsstół.

Czy porady w D8 nadal są obcinane, cache_*jeśli musisz ręcznie wyczyścić pamięć podręczną? Czy bezpieczne / wymagane / zalecane jest obcinanie cachetagsstołu wraz ze cache_*stołami?

Zdaję sobie sprawę, że moduły współdziałające mogą działać inaczej, najbardziej interesuje mnie to, co robi rdzeń i co ogólnie uważa się za „najlepszą praktykę” dla Drupala 8.

Clive
źródło
Możesz po prostu zobaczyć, co wyczyści wszystkie przyciski pamięci podręcznej.
Eyal
Wszystkie tabele pamięci podręcznej są bezpieczne do obcinania, jednak nie zostały całkowicie usunięte.
hamza.gt

Odpowiedzi:

6

W drupal 8, jeśli szukasz bezpiecznych tabel, które należy wyczyścić ręcznie, wyczyść je, zaczynając od cache_, a także skróć również tabelę cachetags.

Jeśli używasz drush, użyj tego polecenia, aby wyczyścić pamięć podręczną

drush cache-rebuild

Rahul Mishra
źródło
3

Zgodnie z tym artykułem cachetags są ustawiane podczas przechowywania obiektów pamięci podręcznej, więc bezpieczne powinno być również obcinanie tej tabeli. Cachetags identyfikują obiekty pamięci podręcznej i można uzyskać wszystkie powiązane obiekty naraz.

Paul Bönisch
źródło
Testowałem i stół może zostać obcięty bez problemów (lub tylko z potencjalnym problemem wydajności). Jest odtwarzany, gdy encja jest ładowana, ale ... Nie wiem dlaczego, jeśli usuniesz instancję encji, tagi zapisane w cachetagach są już w tabeli. Myślę, że trzeba to usunąć.
estoyausente
Zakładam, że dane z tabeli cachetags są usuwane po uruchomieniu crona, a to, co widzisz po usunięciu encji, to po prostu resztki
Paul Bönisch
0

To jest bardzo przydatne. W razie potrzeby zamień 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};
André
źródło
0

Możesz to zrobić dla jednej linijki:

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

Dodaj tyle, ile chcesz z prefiksem cache_.

Dan
źródło