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.


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


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.


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};

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_.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.