Gründe, warum MySQL den Abfrage-Cache abgebrochen hat

Gründe, warum MySQL den Abfrage-Cache abgebrochen hat

MySQL hatte zuvor einen Abfragecache, Query Cache. Ab 8.0 wird dieser Abfragecache nicht mehr verwendet. Was ist also der Grund für den Verzicht darauf? Dieser Artikel stellt es Ihnen vor.

Der MySQL-Abfragecache ist ein Cache mit Abfrageergebnissen. Es vergleicht Abfragen, die mit SEL beginnen, mit der Hash-Tabelle und gibt bei einer Übereinstimmung das Ergebnis der vorherigen Abfrage zurück. Beim Abgleichen muss die Abfrage Byte für Byte abgeglichen werden. Beispielsweise ist SELECT * FROM t1; nicht gleich select * from t1;. Darüber hinaus können einige unsichere Abfrageergebnisse nicht zwischengespeichert werden, und jede Änderung an der Tabelle macht alle Caches dieser Tabellen ungültig. Deshalb ist das beste Szenario für die Abfrage-Zwischenspeicherung das schreibgeschützte Szenario, insbesondere bei komplexen Abfragen, die Millionen von Zeilen prüfen und nur wenige zurückgeben müssen. Wenn Ihre Abfrage eine solche Eigenschaft aufweist, wird die Aktivierung des Abfragecaches Ihre Abfrageleistung verbessern.

Mit fortschreitender Technologie und im Lauf der Zeit stellte das MySQL-Entwicklungsteam fest, dass die Aktivierung des Caching nicht viele Vorteile mit sich brachte.

Erstens hängt die Wirkung des Abfragecaches von der Cache-Trefferquote ab. Nur Abfragen, die den Cache treffen, können verbessert werden, sodass seine Leistung nicht vorhergesagt werden kann.

Zweitens besteht ein weiteres großes Problem mit dem Abfragecache darin, dass er durch einen einzelnen Mutex geschützt ist. Auf einem Server mit vielen Kernen kann eine große Anzahl von Abfragen zu zahlreichen Mutex-Konflikten führen.

Benchmarking hat ergeben, dass die meisten Workloads am besten durch die Deaktivierung des Abfragecaches (Standard für 5.6) bedient werden: query_cache_type = 0

Wenn Sie meinen, dass Sie vom Abfrage-Caching profitieren würden, testen Sie es entsprechend.

  • Je mehr Daten Sie schreiben, desto weniger Nutzen erhalten Sie
  • Je mehr Daten Sie im Pufferpool speichern, desto geringer ist Ihr Nutzen.
  • Je komplexer die Abfrage, je größer der Scanbereich, desto größer der Nutzen

Ein weiterer Grund, warum MySQL 8.0 den Abfrage-Cache abschafft, besteht darin, dass Untersuchungen zeigen, dass der Nutzen umso größer ist, je näher der Cache am Client ist. Weitere Informationen zu dieser Studie finden Sie unter https://proxysql.com/blog/scaling-with-proxysql-query-cache/.

Das folgende Bild stammt von der oben genannten URL:

Darüber hinaus wurden in MySQL 8.0 neue Tools zur Leistungseingriff hinzugefügt. Beispielsweise können Sie jetzt das Query-Rewrite-Plugin verwenden, um Optimizer-Hinweisanweisungen einzufügen, ohne die Anwendung zu ändern. Alternativ gibt es Tools von Drittanbietern wie ProxySQL, die als Zwischencache fungieren können.

Aus den oben genannten Gründen unterstützt MySQL 8.0 das Abfrage-Caching nicht mehr. Wenn Sie von 5.7 auf 8.0 aktualisieren, sollten Sie die Verwendung von Query Rewrite oder anderen Caches in Betracht ziehen.

Der vollständige Text ist vorbei.

Oben finden Sie Einzelheiten dazu, warum MySQL Query Cache abgebrochen hat. Weitere Informationen zu MySQL Query Cache finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Grafische Erklärung des MySQL-Abfragecaches
  • Beschreibung des MySQL-Optimierungsparameters query_cache_limit
  • Startmethode und Parameterdetails für MySQL-Cache (query_cache_size)
  • Missverständnisse über MySQL query_cache
  • Analyse des MySQL Query Cache-Prinzips
  • MySQL query_cache_type-Parameter und Verwendungsdetails

<<:  Detaillierte Erklärung zum Anpassen des Linux-Befehlsverlaufs

>>:  Webinterview: Benutzerdefinierte Vue-Komponenten und Aufrufmethoden

Artikel empfehlen

Beispiel für die Integration von Kafka mit Nginx

Hintergrund nginx-kafka-module ist ein Plug-In fü...

Detaillierte Erklärung zur Verwendung des MySQL-Datentyps DECIMAL

Der MySQL DECIMAL Datentyp wird zum Speichern exa...

Detaillierte Schritte zur Installation von Docker in 5 Minuten

Für die Installation von Docker auf CentOS muss d...

Detaillierte Erläuterung der MySQL-Lösung zur USE DB-Überlastung

Wenn wir auf einen Fehler stoßen, denken wir oft ...

Detaillierte Erklärung zur Verwendung von MySQL mysqldump

1. Einführung in mysqldump mysqldump ist ein logi...

Natives JS zur Implementierung eines atmenden Karussells

Heute zeige ich Ihnen ein mit nativem JS implemen...

HTML löst das Problem ungültiger Tabellenbreiteneinstellungen

Wenn Sie den Stil „table-layer:fixed“ für eine Ta...

CSS3 erzielt einen coolen 3D-Rotationsperspektiveneffekt

CSS3 erreicht coole 3D-Rotationsperspektive 3D-An...

Konfiguration der primären Netzwerk-Portzuordnung für Docker

Portzuordnung Wenn vor dem Start des Docker-Conta...

Grundlegende Verwendung von Unterabfragen in MySQL

Inhaltsverzeichnis 1. Unterabfragedefinition 2. U...

Detaillierte Erklärung zum effizienten MySQL-Paging

Vorwort Normalerweise wird für MySQL-Abfragen mit...

CSS setzt die Höhe des Box-Containers (div) immer auf 100 %

Vorwort Manchmal muss die Höhe eines Box-Containe...

Beispielcode für horizontales Balkendiagramm von Echarts Bar

Inhaltsverzeichnis Horizontales Balkendiagramm Da...