Warum MySQL Abfrage-Cache in Version 8.0 entfernen?
Warum MySQL Abfrage-Cache in Version 8.0 entfernen?
Antworten:
Es gibt eine detaillierte Blog des MySQL-Serverteams darüber, in dem Matt Lord sagt:
Der Abfragecache ist seit MySQL 5.6 (2013) standardmäßig deaktiviert, da bekannt ist, dass er nicht mit Workloads mit hohem Durchsatz auf Multi-Core-Computern skaliert.
Wir haben uns überlegt, welche Verbesserungen wir an der Abfrage des Cache vornehmen können, im Vergleich zu Optimierungen, die wir vornehmen können, um Verbesserungen für alle Workloads zu erzielen.
Während diese Entscheidungen selbst orthogonal sind, sind die technischen Ressourcen begrenzt. Das heißt, wir ändern unsere Strategie, um in Verbesserungen zu investieren, die allgemeiner für alle Workloads gelten.
Auf Nimmerwiedersehen !!!
Für die meisten Datenbankentwickler ist es eine Herausforderung, die Größe der häufigsten Ergebnismengen in ihren Anwendungen korrekt zu schätzen. Ein großer Abfrage-Cache war dafür nur ein großer Verband.
Es gibt einen größeren Grund, der den Niedergang des Abfragecaches vorwegnahm. Vor vier Jahren habe ich den Beitrag beantwortet. Warum ist query_cache_type standardmäßig deaktiviert, ab MySQL 5.6? . Kurz gesagt, der Abfragecache hat den InnoDB-Pufferpool immer auf Änderungen überprüft. Sie finden dies auf den Seiten 209-215 von High Performance MySQL (2nd Edition). .
Ich habe das im Laufe der Jahre erwähnt:
Sep 05, 2012
: Lohnt sich der Aufwand für die häufige Ungültigmachung des Abfragecaches jemals?Sep 25, 2013
: Ungültigmachen von Abfrage-Cache-Einträgen (Schlüssel)Sep 26, 2013
: Der Trefferwert des Abfrage-Cache ändert sich in meiner Datenbank nichtDec 23, 2013
: MySQL mit hoher CPU- und Speicherauslastung(Ich stimme der anderen Antwort zu, aber hier ist mein Wert von 2 Cent.)
Wie implementiert, ...
Die Qualitätskontrolle kann nicht mit Galera oder Gruppenreplikation arbeiten, die beide in der HA-Arena mehr Zugkraft erhalten.
Wenn es query_cache_size
groß wurde, wurde es weniger effizient. Dies ist auf Ineffizienzen beim "Beschneiden" zurückzuführen. (Hinweis: Aurora hat es erneut implementiert und scheint dieses Problem behoben zu haben.)
Jeder hat einen Overhead, SELECT
weil er nicht weiß, ob die Qualitätskontrolle ins Spiel kommt. Vor Jahrzehnten wurde dies auf 11% geschätzt. Bis zur Beseitigung der Qualitätskontrolle bestand die einzige Problemumgehung darin, beides query_cache_size = 0
und query_cache_type = 0
die Konfigurationsdatei auszuführen. (Nur wenige Leute erkannten, dass beide benötigt wurden.)
Auf dem typischen Produktionsserver treten häufig Einfügungen auf. Da bei jeder Einfügung alle Einträge für diese Tabelle (n) gelöscht wurden, war die Qualitätskontrolle für solche Tabellen praktisch unbrauchbar.
Vielleicht sind 95% der Hunderte von Systemen, die ich auf Leistungsprobleme überprüft habe, ohne die Qualitätskontrolle besser dran.