Nachteile eines Query-Cache

May 29

Nachteile eines Query-Cache

MySQL hat ein nützliches Feature namens "Abfragecache" die MySQL-Performance erheblich verbessert, wenn aktiviert. Der Abfrage-Cache enthält den Text einer SELECT-Anweisung sowie das entsprechende Ergebnis, das an den Client gesendet wurde. Wenn die identischen Aussagen in Zukunft empfangen werden, sucht der Server die Ergebnisse der Abfrage-Cache anstelle der Anweisungsausführung wieder gewartet. Der Abfrage-Cache wird auch zwischen den Sitzungen geteilt, so ein Abfrageergebnis generiert, die von einem Benutzer von einem anderen Benutzer verwendet werden kann. Der Abfrage-Cache ist anwendbar in Kontexten, wo Ihre Tabellen nicht oft ändern und der Server empfängt zahlreiche identische Anfragen bezüglich der Tabellen. Abfrage-Cache hat jedoch verschiedene Einschränkungen.

Transparente Zwischenspeichern

Abfrage-Cache ist völlig transparent für die Anwendung. Dies wird unter bestimmten Umständen Probleme verursachen. Wenn Abfrage-Cache aktiviert ist, können Sie immer Abfrageergebnisse erhalten, auch wenn die verknüpften Tabellen gesperrt sind und aktualisiert werden. Sperren von Tabellen in der Regel bedeutet die Tische sind nicht zugänglich, sondern Abfrageergebnisse aus Abfrage-Cache kommen noch Benutzern.

Zwischenspeichern von Einschränkung

Der Abfrage-Cache funktioniert nicht für untergeordnete Auswahlausdrücke, Inline Sichten oder UNION. Die Abfragen müssen exakt übereinstimmen um das Ergebnis der Abfrage-Cache, was bedeutet, wenn Sie die Abfrage mit mehr Leerzeichen oder anderen Fall dynamische Kommentare hinzufügen, erhalten Sie ein anderes Ergebnis aus Abfrage-Cache zu nutzen. Eine weitere Einschränkung ist, dass nur SELECT-Abfragen zwischengespeichert werden. Vermeiden Sie Kommentare oder Leerzeichen im Starten der Abfrage als Abfrage-Cache nur den ersten Buchstaben der Abfrage überprüft und nur wenn es "S" tut es weiterhin Zwischenspeichern Abfrageergebnisse fortfahren.

Ebene TABLE-Granularität in Invalidierung

Wenn Tabellen geändert oder aktualisiert werden, werden alle Abfragen, abgeleitet aus den Tabellen sofort ungültig. Die meisten Abfragen werden nicht geändert, aber MySQL nicht geänderte diejenigen identifizieren, so löscht es alle von ihnen. Dies ist der Hauptgrund, der Abfrage-Cache-Effizienz einschränkt. Vor allem mit hohen schreiben Anwendung wie Foren ist aufgrund dieser Einschränkung Abfrage-Cache-Effizienz sehr niedrig.

Fragmentierung im Laufe der Zeit

Mit der Zeit wird die Abfrage-Cache fragmentiert und weniger effizient. Mithilfe des Befehls "FLUSH QUERY CACHE" für Abfrage-Cache-Defragmentierung verwendet werden kann, aber es kann blocken, Abfrage-Cache um Willen eine große Abfrage-Cache, der unsachgemäße für online-Anwendungen ist.