Wydajność witryny, pamięć podręczna nie działa poprawnie

8

wprowadź opis zdjęcia tutaj

Korzystam z modułu rejestrowania wydajności . Powyżej zrzutu ekranu jedna dziwna rzecz zauważyłem, że wstaw Cache_bootstrap na każdej stronie. Gdy przejdziesz do dowolnej strony (zarówno motywu administratora, jak i motywu interfejsu użytkownika), włóż pamięć podręczną, a następnie usuń pamięć podręczną. Oznacza to, że pamięć podręczna jest ustawiana i niszczona na każdej stronie i faktycznie nie występuje pamięć podręczna. Jak mogę to dalej rozwinąć? Aby zdiagnozować ten problem, ponieważ obecnie pracuję nad wydajnością strony.

wprowadź opis zdjęcia tutaj

Używam również New Relic do sprawdzania wydajności. Pokazuje również, że obciążenie bazy danych jest wysokie.

i informacje o moj.cnf.

wprowadź opis zdjęcia tutaj

Pan J.
źródło

Odpowiedzi:

3

Maksymalny dozwolony rozmiar pakietu może być jednym z powodów, dla których tak się dzieje, ale widzę wiele powodów, dla których prawdopodobnie jest to coś innego w tym przypadku.

  1. Nie tylko zapisujesz pamięć podręczną, ale masz również wyraźne skasowanie pamięci podręcznej. Nieudany zapis w pamięci podręcznej spowodowałby po prostu powtarzanie zapisów w pamięci podręcznej, a następnie pominięcie pamięci podręcznej, ale nie usunięcie.
  2. To jest tabela cache_bootstrap. Istnieje kilka pamięci podręcznych, które mogą być duże, ale zwykle nie pochodzą z tego pojemnika.

Najczęstszą przyczyną tego wzorca są wywołania zmiennej_set (), które występują na każdej stronie. Zobacz, skąd pochodzą te usunięcia pamięci podręcznej, za pomocą xhprof, z xdebug i ustawienia punktu przerwania lub dodając debug_print_backtrace (DEBUG_BACKTRACE_NO_ARGS). Jestem prawie pewien, że zobaczysz tam wywołanie zmiennej_set ().

Problem polega na tym, że istnieje jedna globalna pamięć podręczna dla zmiennych. Każde zapisanie w pamięci podręcznej powoduje usunięcie pamięci podręcznej, a następne żądanie odczyta całą {variables}tabelę i zapisze ją z powrotem w pamięci podręcznej.

Wielu programistów nie zdaje sobie z tego sprawy i robi takie rzeczy, jak „zapewnianie wartości” przez wywołanie zmiennej_set () bezpośrednio w pliku .module lub innym miejscu wykonywanym przy każdym żądaniu.

Berdir
źródło
tak .. to prawda większość programistów nawet ja nie wiem o fakcie zmiennej_set (), o którym mówiłeś. a także poznałem debug_print_backtrace (DEBUG_BACKTRACE_NO_ARGS). Dziękuję za to. :)
Pan J
3

Jest to tylko hipoteza, ale jeśli pamięć podręczna ładowania początkowego przebudowuje się przy każdym ładowaniu strony, może się zdarzyć, że niektórych modułów brakuje w folderze modułów, ale nadal są obecne w tabeli systemowej. Po załadowaniu każdej strony drupal próbuje ją znaleźć i odbudować pamięć podręczną bootstrap.

Wypróbuj moduł optymalizacyjny Bootstrap , pomoże znaleźć takie rekordy i je usunąć.

Bogdan Tur
źródło