Vorteile von Barracuda und Kompression

12

Ich habe vor einiger Zeit über die MySQL-Dateiformate Antelope und Barracuda gelesen, und ich frage mich, ob ich von Barracuda und Compression profitieren könnte.

Mein Server verwendet derzeit Antelope, da dies der Standard von MySQL ist.
Ich hatte viele Probleme mit dem Speicher aufgrund der großen Datenbank, die ich habe. Meine Datenbank wächst von Tag zu Tag.

Es scheint, dass die Komprimierung einigen Leuten Vorteile bringt, wie zum Beispiel:
http://www.mysqlperformanceblog.com/2008/04/23/real-life-use-case-for-barracuda-innodb-file-format/

Ich verstehe, dass Speicher und Speicherplatz geringer sein können, aber ich bin mir nicht sicher, ob ich das verstehe (aus dem Artikel zitiert):
"~ 5% CPU-Auslastung nach oben (von 80-100% meistens warten auf E / A)
0,01 durchschnittliche Suchzeit pro Primärschlüssel (von 1 bis 20 Sekunden vor der Konvertierung)

Ich dachte, diese beiden Dinge würden sich NICHT verbessern, denn wenn die Daten komprimiert werden, muss der Server dekomprimiert werden, um die ursprünglichen Daten wieder zu erhalten. Ist das nicht sinnvoll, dass die CPU-Auslastung zunehmen würde?

Kommt Ihnen das bei schreibintensiven Anwendungen zugute? Würden Sie mir empfehlen, zu Barracuda and Compression zu wechseln?

Kennen Sie irgendwelche Probleme mit Barracuda?
Die Antwort auf die folgende Frage weist anscheinend auf einige Probleme hin, aber seit 2011 sind sie behoben: /server/258022/mysql-innodb-how-to-switch -to-Barracuda-Format

Nuno
quelle

Antworten:

14

In Bezug auf "Dynamic" , das nicht komprimierte Barracuda-reine Format, hat sich von "Compact" nur wenig geändert, vor allem was die Speicherung von Blobs (und sehr dynamischen Feldern) betrifft . Ich hatte noch nie Probleme mit compact vs. dynamic, daher kann ich Barracuda's dynamic ohne Bedenken empfehlen. Denken Sie daran, dass Barracuda auch alte redundante und kompakte Zeilenformate unterstützt .

Der Artikel, den Sie erwähnen, ist wahrscheinlich zu alt (5.1) und, wie Peter Z., CEO von Percona, in den Kommentaren erwähnt, ist er möglicherweise etwas irreführend. Das bedeutet nicht, dass die Komprimierung abhängig von der Arbeitslast kein großer Gewinn sein kann. Ich würde Ihnen jedoch empfehlen, es mit Versionen> = 5.6 zu versuchen, da sowohl Facebook als auch Oracle zahlreiche Verbesserungen vorgenommen haben.

Als neueres Referenzmaterial empfehle ich Ihnen:

Insbesondere mag ich Facebook-Materialien, da sie von Drittanbietern stammen (keine Agenda erforderlich) und eine der größten MySQL-Bereitstellungen der Welt haben. Wie Sie sehen, waren die Setups sehr erfolgreich und kombinierten die SSD-Technologie mit der Komprimierung.

Wird es dir nützen? Das hängt von Ihrer Arbeitsbelastung, Ihrem Arbeitssatz und Ihrem Setup (IOPS, Speicher) ab . Abhängig davon, ob Sie an E / A, CPU oder Speicher gebunden sind, kann sich die Komprimierung in einigen Fällen negativ auswirken, indem Sie zusätzliche CPU- und Speicheranforderungen hinzufügen (sowohl komprimierte als auch nicht komprimierte Seiten werden im InnoDB-Pufferpool gespeichert) oder zu viele Komprimierungsfehler generieren die Latenz. Dies hängt auch von der Art der Daten ab: Die Komprimierung kann bei großen Textblobs sehr hilfreich sein, bei bereits komprimierten Daten kann sie jedoch unbrauchbar sein.

Nach meiner Erfahrung gibt es in der Praxis Menschen, für die die Komprimierung der heilige Gral der Leistung war und die damit sehr zufrieden sind. In anderen Fällen mussten wir jedoch auf unkomprimierte Daten zurückgreifen, da kein Gewinn erzielt wurde. Während eine sehr hohe Schreibarbeitslast wie eine schlechte Umgebung für die Komprimierung erscheint, ist sie in Ihrem speziellen Fall möglicherweise nicht an die CPU und den Arbeitsspeicher gebunden, aber an die E-Mails.

Im Allgemeinen ist es sehr schwierig, Ergebnisse vorherzusagen. In der Regel sollten Sie eine Testumgebung für das Benchmarking einrichten und dann herausfinden, warum Sie bessere oder schlechtere Ergebnisse erzielen (und auf diese Weise mit unterschiedlichen Blockgrößen usw. spielen können). Barracuda ist absolut sicher. Komprimierung kann für Sie sein oder nicht. Und Sie können immer mit anderen Komprimierungsmethoden experimentieren, wie der clientseitigen Komprimierung von Blobs (zum Beispiel wenn Sie CPU-gebunden sind) oder anderen Engines von Drittanbietern wie RocksDB und TokuDB , bei denen die Komprimierung eine große Priorität hat, da sie fokussiert ist bei der Leistung für größere Datensätze, als InnoDB verarbeiten kann.

Kurz gesagt: Hauptgründe für die Verwendung von Barracuda sind die BLOB-Verarbeitung, die innodb_large_prefixKompatibilität (große Indizes) und die Komprimierung. Dynamisch ist unter MySQL 8.0 nun das Standarddateiformat.

jynus
quelle
1
Dies ist eine wirklich tolle und klare Antwort! Es macht Sinn und ist genau die Art der Antwort, die ich gewünscht habe. Sie erwähnen MySQL 5.6 (das ist, was ich kürzlich aktualisiert habe) und nennen Facebook als Beispiel, wie ich es mag, da sie normalerweise die Herausforderungen vor allen anderen bewältigen müssen. Leider wird es nicht einfach sein, dies zuerst zu testen, da eine Testumgebung nicht die gleiche CPU / IO / RAM-Last wie die Produktion hat, aber ich muss es versuchen! Vielen Dank für Ihre Zeit.
Nuno
Da das Zeilenformat auf Tabellenebene gewählt werden kann, können Sie die Produktion flexibel testen (nach ordnungsgemäßem Testen auf einer separaten Maschine). Dieser Ansatz wird jedoch möglicherweise das Debugging und Benchmarking erschweren.
Jynus
Ja, ich könnte wahrscheinlich versuchen, zuerst ein paar Tabellen zu konvertieren (vielleicht die, die nicht so groß sind / verwendet werden). Für die Großen wären jedoch ein paar Ausfallzeiten erforderlich, und nicht nur eine Ausfallzeit, in der ich alle auf einmal konvertieren würde. Ich werde sehen müssen, was der beste Ansatz ist. Ich verstehe jedoch nicht, warum dies das Debuggen erschweren würde. Was genau meinst du hier? Vielen Dank.
Nuno
1
Sie haben Tools wie pt-online-schema-change percona.com/doc/percona-toolkit/2.2/… , um Tabellen online neu zu erstellen. Ich habe gerade erwähnt, dass das Mischen nur einiger Tabellen das Messen von CPU- / Speicher- / IOP-Änderungen aufgrund des Motorwechsels und das Unterscheiden von normalen Lastwechseln oder aufgrund von Caching-Änderungen beim Neuerstellen erschweren kann. Es ist auch schwierig, auf einer anderen Maschine mit unterschiedlicher Hardware zu sehen, also viel Glück!
Jynus
Unter ZFS ist dies nicht unbedingt sinnvoll, wenn LZ4 im Dateisystem verwendet wird.
Denis Denisov