Der Abfrage-Cache ist eine Funktion in MySQL, die die Datenbankleistung steigern soll, indem die Ergebnisse von SELECT-Abfragen zwischengespeichert werden. Wenn eine zuvor ausgeführte Abfrage erneut ausgeführt wird, kann MySQL das Ergebnis schnell aus diesem Cache abrufen, anstatt es erneut für die Datenbank auszuführen. Dies beschleunigt nicht nur den Datenabruf, sondern reduziert auch die Belastung der Datenbank und macht sie für häufig ausgeführte Abfragen mit konsistenten Parametern äußerst effizient.
Immer wenn eine Abfrage ausgegeben wird, schaut MySQL zunächst im Abfrage-Cache nach, um zu prüfen, ob das Ergebnis einer identischen Abfrage zuvor gespeichert wurde. Wenn es eine Übereinstimmung gibt, umgeht MySQL den üblichen Abfrageausführungsprozess und stellt das zwischengespeicherte Ergebnis direkt bereit. Dies ist viel schneller, da die zeitaufwändigen Schritte der Abfrageverarbeitung und des Festplattenzugriffs entfallen und stattdessen die Geschwindigkeit des Speicherzugriffs genutzt wird.
Wir wenden uns nun den kritischen Abfrage-Cache-Variablen zu – query_cache_type, query_cache_size, query_cache_limit und query_cache_min_res_unit – und ihren Auswirkungen auf die MySQL-Leistung.
Die Variable query_cache_type in MySQL steuert, ob der Abfragecache aktiviert, deaktiviert oder so eingestellt ist, dass er nur bei Bedarf ausgeführt wird.
Der Abfragecache speichert den Text einer SELECT-Anweisung zusammen mit dem entsprechenden Ergebnis, das an den Client gesendet wurde. Wenn später eine identische Anweisung empfangen wird, ruft der Server die Ergebnisse aus dem Cache ab, anstatt die Anweisung erneut zu analysieren und auszuführen. Durch die Aktivierung des Abfragecaches kann die Zeit, die benötigt wird, um Ergebnisse für häufig ausgeführte Abfragen zu erhalten, erheblich verkürzt werden, indem diese aus dem Speicher bereitgestellt werden, anstatt sie erneut auszuführen.
Das Festlegen der Variable query_cache_type in MySQL auf unterschiedliche Werte bestimmt, wie sich der Abfragecache verhält:
0 (AUS) – Deaktiviert den Abfragecache, obwohl noch ein Puffer von query_cache_size Bytes zugewiesen ist.
1 (EIN) – Aktiviert den Abfragecache für alle SELECT-Abfragen, es sei denn, SQL_NO_CACHE ist in der Abfrage angegeben.
2 (DEMAND) – Aktiviert den Abfragecache nur für Abfragen, die explizit die SQL CACHE-Klausel verwenden.
Query_cache_type kann offline oder online konfiguriert werden, wenn der Server läuft. Die Konfiguration kann online bevorzugt werden, um Tests zu ermöglichen. Wenn der Server neu gestartet wird, wird der query_cache_type zurückgesetzt.
Befehlszeilenkonfiguration:
mysqld> Setzen Sie den globalen query_cache_type = XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Um zu überprüfen, ob die Variable geändert wurde:
mysqld> globale Variablen wie „query_cache_type“ anzeigen
Konfigurationsdatei:
[mysqld]
query_cache_type = XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Starten Sie den MySQL-Server neu.
Gemäß allgemeinen Empfehlungen sollten Sie query_cache_type für Umgebungen, in denen sich die Daten selten ändern, aber häufig gelesen werden, auf 1 (EIN) setzen. Wird in hochdynamischen Umgebungen, in denen der Aufwand für die Cache-Pflege die Vorteile überwiegen kann, auf 0 (AUS) gesetzt.
Das wahllose Aktivieren des Abfragecaches führt möglicherweise nicht immer zu Leistungsvorteilen und kann in einigen Szenarien sogar die Leistung beeinträchtigen. Berücksichtigen Sie beim Konfigurieren von query_cache_type die folgenden Faktoren:
Die Größe des Abfragecaches – Ein größerer Cache kann mehr Abfrageergebnisse speichern, benötigt aber mehr Speicher.
Abfragemuster – Abfragen mit sich häufig ändernden Ergebnissen oder großen Ergebnismengen profitieren möglicherweise nicht vom Caching.
Cache-Ungültigmachung – Aktualisierungen, Einfügungen oder Löschungen in zwischengespeicherten Tabellen machen entsprechende Cache-Einträge ungültig, was zu einer Cache-Abwanderung führt.
Parallelität – Der Abfragecache ist aufgrund von Konfliktproblemen nicht für stark gleichzeitige Arbeitslasten geeignet.
MySQL-Version – Die Abfrage-Cache-Funktion ist in MySQL 5.7 veraltet und wurde in MySQL 8.0 entfernt, da sie Einschränkungen aufweist und in Multithread-Umgebungen zu Konflikten führen kann.
Gibt die Menge an Speicher an, die zum Speichern der Ergebnisse zwischengespeicherter Abfragen zugewiesen wird. Dies ist ein Hauptfaktor bei der Bestimmung, wie viele Ergebnisse gleichzeitig zwischengespeichert werden können.
Die Variable query_cache_size bestimmt die Menge an Speicher, die für den Abfragecache zugewiesen wird. Dieser Wert sollte basierend auf der Art Ihrer Arbeitslast und den verfügbaren Speicherressourcen angepasst werden:
Kleine Ergebnismengen – Wenn Ihre Anwendung häufig Abfragen ausführt, die kleine Ergebnismengen zurückgeben, kann eine größere Größe des Abfragecaches von Vorteil sein. Dadurch können mehr Abfragen im Cache gespeichert werden, wodurch die Notwendigkeit der Abfrageausführung verringert wird.
Häufige identische Abfragen – In Szenarien, in denen dieselben Abfragen wiederholt ausgeführt werden, kann eine Erhöhung der query_cache_size die Leistung verbessern, indem diese Abfragen und ihre Ergebnisse zwischengespeichert werden.
Abfrage-Cache-Trefferquote – Die Überwachung der Abfrage-Cache-Trefferquote kann Einblicke in die Wirksamkeit des Caches liefern. Wenn die Trefferquote niedrig ist, kann eine Erhöhung der query_cache_size zur Verbesserung der Cache-Effizienz beitragen.
Query_cache_size kann offline oder online konfiguriert werden, wenn der Server läuft. Die Konfiguration kann online bevorzugt werden, um Tests zu ermöglichen. Wenn der Server neu gestartet wird, wird die query_cache_size zurückgesetzt.
Befehlszeilenkonfiguration:
mysqld> setze global query_cache_size = XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Um zu überprüfen, ob die Variable geändert wurde:
mysqld> globale Variablen wie „query_cache_size“ anzeigen
Konfigurationsdatei:
_[mysqld]
query_cache_size _= XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Starten Sie den MySQL-Server neu.
Die query_cache_size sollte basierend auf dem verfügbaren Speicher und der Art Ihrer Arbeitslast festgelegt werden. Eine zu große Einstellung kann zu einer Erschöpfung des Gedächtnisses führen, während eine zu kleine Einstellung die Wirksamkeit beeinträchtigen kann.
Die Überwachung der Auslastung des Caches (Treffer versus Einfügungen) hilft bei der richtigen Größenbestimmung. Beginnen Sie mit einer moderaten Größe, z. B. 64 MB bis 128 MB, und passen Sie sie je nach Leistung und verfügbarem Systemspeicher an.
Berücksichtigen Sie beim Konfigurieren von query_cache_size die folgenden Faktoren:
Abfragemuster – Abfragen mit sich häufig ändernden Ergebnissen oder großen Ergebnismengen profitieren möglicherweise nicht vom Caching.
Cache-Ungültigmachung – Aktualisierungen, Einfügungen oder Löschungen in zwischengespeicherten Tabellen machen entsprechende Cache-Einträge ungültig, was zu einer Cache-Abwanderung führt.
Parallelität – Der Abfragecache ist aufgrund von Konfliktproblemen nicht für stark gleichzeitige Arbeitslasten geeignet.
MySQL-Version – Die Abfrage-Cache-Funktion ist in MySQL 5.7 veraltet und wurde in MySQL 8.0 aufgrund von Einschränkungen und Konflikten in Multithread-Umgebungen entfernt.
Diese Variable legt die maximale Größe für einzelne Abfrageergebnisse fest, die zwischengespeichert werden können. Es verhindert, dass große Abfragen unverhältnismäßig viel Cache-Speicherplatz verbrauchen.
Wenn ein Abfrageergebnis den query_cache_limit überschreitet, wird das Ergebnis nicht zwischengespeichert. Dadurch wird verhindert, dass übermäßig große oder ressourcenintensive Abfragen den Cache mit Ergebnissen füllen, die möglicherweise nicht häufig wiederverwendet werden. Durch Festlegen eines geeigneten Werts für query_cache_limit können Sie sicherstellen, dass nur kleinere, häufiger verwendete Abfrageergebnisse zwischengespeichert werden, wodurch die Speichernutzung optimiert wird.
Query_cache_limit kann offline oder online konfiguriert werden, wenn der Server läuft. Die Konfiguration kann online bevorzugt werden, um Tests zu ermöglichen. Wenn der Server neu gestartet wird, wird query_cache_limit zurückgesetzt.
Befehlszeilenkonfiguration:
mysqld> Setzen Sie das globale query_cache_limit = XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Um zu überprüfen, ob die Variable geändert wurde:
mysqld> globale Variablen wie „query_cache_limit“ anzeigen
Konfigurationsdatei:
[mysqld]
query_cache_limit = XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Starten Sie den MySQL-Server neu.
In der Regel wird empfohlen, query_cache_limit zwischen 1 MB und 4 MB festzulegen, abhängig von der Art der Abfragen und der verfügbaren Cache-Größe. Es ist wichtig zu beachten, dass eine zu niedrige Einstellung von query_cache_limit dazu führen kann, dass nützliche Abfrageergebnisse aus dem Cache ausgeschlossen werden, was die Wirksamkeit des Abfragecaches verringert.
Die Variable query_cache_min_res_unit in MySQL bestimmt die Mindestgröße in Bytes für Blöcke, die vom Abfragecache zugewiesen werden. Diese Einstellung wirkt sich auf die Effizienz des Abfragecaches aus, indem sie die Granularität der zwischengespeicherten Ergebnisse steuert.
Wenn ein Abfrageergebnis im Abfragecache gespeichert wird, belegt es eine bestimmte Menge an Speicher. Die Variable query_cache_min_res_unit definiert die Mindestgröße der Speicherblöcke, die für diese zwischengespeicherten Ergebnisse zugewiesen werden. Wenn ein Abfrageergebnis kleiner als dieser Wert ist, nimmt es immer noch die durch query_cache_min_res_unit.
definierte Mindestgröße einQuery_cache_min_res_unit kann offline oder online konfiguriert werden, wenn der Server läuft. Um Tests zu ermöglichen, kann die Konfiguration online bevorzugt werden. Wenn der Server neu gestartet wird, wird query_cache_min_res_unit zurückgesetzt.
Befehlszeilenkonfiguration:
mysqld> setze global query_cache_min_res_unit = XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Um zu überprüfen, ob die Variable geändert wurde:
mysqld> globale Variablen wie „query_cache_min_res_unit“ anzeigen
_
Konfigurationsdatei:
_[mysqld]
query_cache_min_res_unit = XX
Ersetzen Sie XX durch einen Wert, der Ihren Datenbankanforderungen entspricht. Starten Sie den MySQL-Server neu.
Das Konfigurieren von query_cache_min_res_unit umfasst das Festlegen der Variablen auf einen geeigneten Wert, der den Speicherverbrauch mit der Caching-Effizienz in Einklang bringt. Der Wert sollte basierend auf der durchschnittlichen Größe der Abfrageergebnisse in Ihrer Arbeitslast ausgewählt werden.
Ein kleinerer Wert kann zu einer effizienteren Speichernutzung führen, könnte aber aufgrund von mehr Cache-Einträgen zu einem höheren Overhead führen.
Umgekehrt kann ein größerer Wert die Anzahl der Cache-Einträge verringern, könnte aber zu einer Speicherverschwendung für kleinere Abfrageergebnisse führen.
Analysieren Sie Ihre Arbeitslast, um die durchschnittliche Größe der Abfrageergebnisse zu ermitteln. Passen Sie den Wert von query_cache_min_res_unit basierend auf dieser Analyse an, um ein Gleichgewicht zwischen Speicherverbrauch und Caching-Effizienz zu erreichen. Bei den meisten Setups liegt diese zwischen 16 MB und 64 MB.
Der Abfragecache war ab MySQL 5.7.20 veraltet und wurde in MySQL 8.0 vollständig entfernt. Wenn Ihre MySQL-Version weiterhin query_cache verwenden kann, muss es aktiviert werden, da es standardmäßig deaktiviert ist. Um den Abfragecache in MySQL, MariaDB oder Percona zu aktivieren und zu konfigurieren, müssen Sie normalerweise auf die Datei my.cnf oder my.ini Ihres Servers zugreifen. Hier ist eine Schritt-für-Schritt-Anleitung:
1. Abfrage-Cache aktivieren – Setzen Sie query_cache_type auf 1 oder 2. Wenn Sie query_cache_type oder query_cache_size auf Null setzen, wird der Cache immer deaktiviert. Für selektives Caching (empfohlen für die meisten Anwendungsfälle) würden Sie Folgendes verwenden:
query_cache_type = 1
query_cache_size = 100M
3. Ergebnisgrößenbeschränkung definieren – Konfigurieren Sie query_cache_limit, um die Größe der gespeicherten Ergebnisse zu steuern. Dies kann je nach typischer Abfragegröße bei einigen Megabyte beginnen:
query_cache_limit = 2M
4. Minimale Ergebniseinheit anpassen – Ändern Sie query_cache_min_res_unit entsprechend Ihren Anforderungen. Wenn Sie diesen Wert unter den Standardwert reduzieren, kann dies dazu beitragen, den Cache-Speicherplatz effizienter zu nutzen, insbesondere wenn Sie viele kleine Abfragen erwarten:
query_cache_min_res_unit = 512
QCache-Fragmentierung ist ein wichtiger Indikator für die Leistung des Abfrage-Cache in MySQL. Diese Funktion dient zum Speichern der Ergebnisse von SELECT-Abfragen, sodass wiederholte Anforderungen schnell erfüllt werden können, ohne dass die Abfrage erneut ausgeführt werden muss, wodurch die Leistung gesteigert wird. Mit der Zeit kann der Abfrage-Cache jedoch fragmentiert werden, was zu einer verringerten Wirksamkeit führt.
Schauen Sie sich unsere umfassende Health Checks-Dokumentation an, die Informationen und Schritt-für-Schritt-Anleitungen zur Berechnung der QCache-Fragmentierung enthält.
Sobald Sie die QCache-Fragmentierung und QcacheDeleteRate berechnet haben, müssen Sie die Ergebnisse interpretieren. Idealerweise sollte die QCache-Fragmentierung weniger als 10 und die QcacheDeleteRate weniger als 20 betragen.
Wenn die QCache-Fragmentierung hoch ist, müssen Sie möglicherweise die Größe des Abfragecaches anpassen, um die Fragmentierung zu reduzieren. Wenn die QcacheDeleteRate hoch ist, müssen Sie möglicherweise die Größe des Abfragecaches erhöhen oder Ihre Abfragen optimieren, um die Anzahl der INSERTs zu reduzieren.
Das Optimieren des MySQL-Abfragecaches umfasst die Anpassung verschiedener Einstellungen zur Optimierung der Datenbankleistung, von der Verwaltung der Speichernutzung bis zur Reduzierung der Abfragezeiten. Während die hier besprochenen Variablen eine gute Grundlage bilden, erfordert eine effektive Verwaltung eine kontinuierliche Überwachung und Aktualisierungen basierend auf der tatsächlichen Systemlast und -leistung.
Um diesen Prozess zu vereinfachen, sollten Sie die Verwendung eines leistungsstarken Verwaltungstools wie Releem in Betracht ziehen, das diese Anpassungen automatisiert. Ein solches Tool kann die Leistung Ihres Systems kontinuierlich überwachen und die query_cache-Einstellungen dynamisch in Echtzeit aktualisieren.
So haben Sie Zeit, sich auf umfassendere Ziele zu konzentrieren, während Releem sich um die Feinheiten der Abfrage-Cache-Optimierung kümmert.
Das obige ist der detaillierte Inhalt vonSchalten Sie die MySQL-Leistung frei: Beherrschen Sie die Abfrage-Cache-Optimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!