Site-Leistung, Cache funktioniert nicht richtig

8

Geben Sie hier die Bildbeschreibung ein

Ich verwende das Leistungsprotokollierungsmodul . Oben Screenshot, eine seltsame Sache, die ich bemerkt habe, dass Cache_bootstrap auf jeder Seite einfügen. Wenn Sie zu einer beliebigen Seite wechseln (sowohl zum Admin-Design als auch zum Frontend-Design), wird der Cache einfügen und dann der Cache löschen ausgeführt. Dies bedeutet, dass der Cache auf jeder Seite gesetzt und zerstört wird und tatsächlich kein Cache auftritt. Wie kann ich es weiter ausarbeiten? Um dieses Problem zu diagnostizieren, arbeite ich derzeit an der Leistung der Site.

Geben Sie hier die Bildbeschreibung ein

Ich verwende New Relic auch zur Leistungsprüfung. Es zeigt auch, dass die Datenbanklast hoch ist.

und my.cnf Informationen.

Geben Sie hier die Bildbeschreibung ein

Herr J.
quelle

Antworten:

3

Die maximal zulässige Paketgröße könnte ein Grund dafür sein, aber ich kann mehrere Gründe erkennen, warum es in diesem Fall wahrscheinlich etwas anderes ist.

  1. Sie haben nicht nur Cache-Schreibvorgänge, sondern auch explizite Cache-Löschungen. Ein fehlgeschlagener Cache-Schreibvorgang würde nur dazu führen, dass Cache-Schreibvorgänge wiederholt werden und der Cache dann fehlschlägt, jedoch nicht gelöscht wird.
  2. Dies ist die Tabelle cache_bootstrap. Es gibt einige Caches, die groß werden können, aber normalerweise nicht aus diesem Bin.

Der häufigste Grund für dieses Muster sind variable_set () -Aufrufe, die auf jeder Seite ausgeführt werden. Sehen Sie sich an, woher diese Cache-Löschungen kommen, entweder mit xhprof, mit xdebug und setzen Sie einen Haltepunkt oder fügen Sie ein debug_print_backtrace (DEBUG_BACKTRACE_NO_ARGS) hinzu. Ich bin mir ziemlich sicher, dass Sie dort einen Aufruf von variable_set () sehen werden.

Das Problem ist, dass es einen einzigen globalen Cache für Variablen gibt. Jeder Cache-Schreibvorgang führt zu einer Cache-Löschung. Bei der nächsten Anforderung wird die gesamte {variables}Tabelle ausgelesen und in den Cache zurückgeschrieben.

Viele Entwickler sind sich dessen nicht bewusst und tun Dinge wie "Sicherstellen von Werten", indem sie variable_set () direkt in einer .module-Datei oder an einem anderen Ort aufrufen, der bei jeder Anforderung ausgeführt wird.

Berdir
quelle
Ja, das ist wahr, die meisten Entwickler wissen selbst ich nichts über die Tatsache variable_set (), die Sie besprochen haben. und ich lerne auch debug_print_backtrace (DEBUG_BACKTRACE_NO_ARGS) kennen. Dank dafür. :)
Mr. J
3

Es ist nur eine Hypothese, aber wenn Ihr Bootstrap-Cache bei jedem Laden der Seite neu erstellt wird, kann es vorkommen, dass einige Ihrer Module im Modulordner fehlen, aber immer noch in der Systemtabelle vorhanden sind. Auf jeder Seite versucht load drupal, sie zu finden und bootstrap_cache neu zu erstellen.

Probieren Sie das Bootstrap-Optimierungsmodul aus . Es hilft, solche Datensätze zu finden und zu löschen.

Bogdan Tur
quelle