Ich führe diesen Befehl aus:
pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2
Es dauert zu lange. Ich schaue mir die Prozesse mit an top
. Der bzip2-Prozess benötigt ungefähr 95% und postgres 5% eines Kerns. Der wa
Eintrag ist niedrig. Dies bedeutet, dass die Festplatte nicht der Engpass ist.
Was kann ich tun, um die Leistung zu steigern?
Vielleicht lassen Sie bzip2 mehr Kerne verwenden. Der Server hat 16 Kerne.
Oder eine Alternative zu bzip2 nutzen?
Was kann ich tun, um die Leistung zu steigern?
performance
postgresql
gzip
guettli
quelle
quelle
Antworten:
Es gibt viele Komprimierungsalgorithmen und
bzip2
einer der langsameren. Plaingzip
neigt in der Regel nicht viel schlechter Kompression deutlich schneller zu sein. Wenn Geschwindigkeit am wichtigsten ist,lzop
ist mein Favorit. Schlechte Komprimierung, aber ach so schnell.Ich beschloss, ein bisschen Spaß zu haben und ein paar Algorithmen einschließlich ihrer parallelen Implementierungen zu vergleichen. Die Eingabedatei ist die Ausgabe des
pg_dumpall
Befehls auf meiner Workstation, eine SQL-Datei mit 1913 MB. Die Hardware ist ein älterer Quad-Core i5. Die Zeiten sind Wanduhrzeiten nur der Kompression. Bei parallelen Implementierungen werden alle 4 Kerne verwendet. Tabelle sortiert nach Kompressionsgeschwindigkeit.Wenn die 16 Kerne Ihres Servers im Leerlauf sind, sodass alle für die Komprimierung verwendet werden können,
pbzip2
wird dies wahrscheinlich zu einer erheblichen Beschleunigung führen. Aber Sie brauchen noch mehr Geschwindigkeit und können ~ 20% größere Dateien tolerieren,gzip
ist wahrscheinlich die beste Wahl.Update: Ich habe
brotli
der Tabelle Ergebnisse hinzugefügt (siehe TOOGAMs Antwort).brotli
s Druckqualitätseinstellung eine sehr große Auswirkung auf Verdichtungsverhältnis und die Geschwindigkeit hat, so dass ich drei Einstellungen hinzugefügt (q0
,q1
, undq11
). Die Standardeinstellung istq11
, aber es ist extrem langsam und noch schlimmer alsxz
.q1
sieht aber sehr gut aus; das gleiche Kompressionsverhältnis wiegzip
, aber 4-5 mal so schnell!Update: Hinzugefügt
lbzip2
(siehe gmathts Kommentar) undzstd
(Johnnys Kommentar) zur Tabelle und sortiert nach Kompressionsgeschwindigkeit.lbzip2
bringt diebzip2
Familie zurück ins Rennen, indem sie dreimal so schnellpbzip2
komprimiert wie mit einem hervorragenden Kompressionsverhältnis!zstd
sieht auch vernünftig aus, ist aberbrotli (q1)
sowohl in der Übersetzung als auch in der Geschwindigkeit besser.Meine ursprüngliche Schlussfolgerung, dass Plain
gzip
die beste Wette ist, fängt an, fast albern auszusehen. Obwohl für die Allgegenwart, ist es immer noch nicht zu schlagen;)quelle
pg_dumpall
lz4
ist übrigens etwas schneller und effizienter alslzop
. Es wird jedoch mehr RAM verwendet, was für eingebettete Systeme relevant ist.zstd -T4
. Für sehr schnelle Einstellungen können Sie versuchenzstd -T4 -1
,zstd
standardmäßig-3
die von Ihnen getestete Einstellung zu verwenden.Verwenden Sie pbzip2.
Das Handbuch sagt:
Es erkennt automatisch die Anzahl Ihrer Prozessoren und erstellt die entsprechenden Threads.
quelle
pixz
undpigz
an einer Pipe.lbzip2
scheint eine bessere Geschwindigkeit, Speichernutzung und geringfügig bessere Komprimierung alspbzip2
. Hier gibt es Benchmarks: vbtechsupport.com/1614lbzip2
sieht gut aus! Ich habe es zu meiner Antwort hinzugefügt :)Daten:
Vergleich der Kompressionsalgorithmen Brotli, Deflate, Zopfli, LZMA, LZHAM und Bzip2
CanIUse.com: Feature: brotli zeigt Unterstützung von Microsoft Edge, Mozilla Firefox, Google Chrome, Apple Safari, Opera (jedoch nicht Opera Mini oder Microsoft Internet Explorer).
Vergleich: Brotli vs deflate vs zopfli vs lzma vs lzham vs bzip2
-
Wenn Sie nach einer Komprimierungsgeschwindigkeit suchen, ist das, wonach Sie suchen, welche Linien sich weiter rechts in diesem Diagramm befinden. (Die Einträge oben in diesem Diagramm zeigen ein enges Komprimierungsverhältnis. Höher = enger. Wenn jedoch die Komprimierungsgeschwindigkeit Ihre Priorität ist, sollten Sie mehr darauf achten, welche Linien direkt im Diagramm weiter reichen.)
Vergleich: Komprimierungsrate und Komprimierungsgeschwindigkeit für 7-Zip-ZStandard-MethodenSie haben kein Betriebssystem erwähnt. Unter Windows ist 7-Zip mit ZStandard (Releases) eine Version von 7-Zip, die geändert wurde, um die Verwendung all dieser Algorithmen zu unterstützen.
quelle
brotli
hatte, aber ich habe es vergessen. Ich habe es in meiner Antwort zur Benchmarktabelle hinzugefügt! Eigentlich war ich ein wenig enttäuscht von der Leistung, außer bei Qualitätseinstellung 1, wo das gleiche Kompressionsverhältnis wiegzip
bei einer viel höheren Geschwindigkeit erzielt wurde.Verwenden Sie zstd . Wenn es für Facebook gut genug ist, ist es wahrscheinlich auch für Sie gut genug.
Im Ernst, es ist eigentlich ziemlich gut . Ich benutze es jetzt für alles, weil es einfach funktioniert und Sie damit im großen Stil Geschwindigkeit gegen Verhältnis tauschen können (am häufigsten ist Geschwindigkeit ohnehin wichtiger als Größe, da Speicher billig ist, Geschwindigkeit aber ein Engpass).
Bei Komprimierungsstufen, die eine vergleichbare Gesamtkomprimierung wie bzip2 erzielen, ist dies erheblich schneller. Wenn Sie bereit sind, etwas mehr CPU-Zeit zu bezahlen, können Sie fast ähnliche Ergebnisse wie bei LZMA erzielen (obwohl dies dann langsamer ist als bei bzip2). Bei etwas schlechteren Komprimierungsraten ist es viel, viel schneller als bzip2 oder jede andere Mainstream-Alternative.
Jetzt komprimieren Sie einen SQL-Speicherauszug, der so peinlich einfach zu komprimieren ist, wie er nur sein kann. Sogar die ärmsten Kompressoren schneiden bei dieser Art von Daten gut ab.
Sie können also
zstd
mit einer niedrigeren Komprimierungsstufe ausgeführt werden, die dutzende Male schneller ausgeführt wird und dennoch 95-99% der gleichen Komprimierung für diese Daten erzielt.Als Bonus können Sie, wenn Sie dies häufig tun und etwas mehr Zeit investieren möchten, den
zstd
Kompressor im Voraus "trainieren" , was sowohl das Kompressionsverhältnis als auch die Geschwindigkeit erhöht. Beachten Sie, dass Sie einzelne Datensätze füttern müssen, damit das Training gut funktioniert, und nicht das Ganze. Aufgrund der Funktionsweise des Tools werden viele kleine und etwas ähnliche Beispiele für das Training erwartet, nicht ein einziger großer Blob.quelle
Es sieht so aus, als ob das Anpassen (Verringern) der Blockgröße einen erheblichen Einfluss auf die Komprimierungszeit haben kann.
Hier sind einige Ergebnisse des Experiments, das ich auf meiner Maschine durchgeführt habe. Ich habe den
time
Befehl verwendet, um die Ausführungszeit zu messen.input.txt
ist eine ~ 250-MB-Textdatei mit beliebigen JSON-Datensätzen.Verwenden der Standardblockgröße (größte Blockgröße) (
--best
wählt lediglich das Standardverhalten aus):Verwenden der kleinsten Blockgröße (
--fast
Argument):Dies war eine etwas überraschende Entdeckung, wenn man bedenkt, dass in der Dokumentation steht:
quelle