Beschleunigen Sie die GZIP-Komprimierung


15

Ist es möglich, den gzipProzess zu beschleunigen ?

Ich benutze

mysqldump "$database_name" | gzip > $BACKUP_DIR/$database_name.sql.gz

zur Sicherung einer Datenbank in ein Verzeichnis, $BACKUP_DIR.

Die Manpage sagt:

- # --fast --best
Regelt die Geschwindigkeit der Komprimierung mit der angegebenen Ziffer #, wobei -1 oder --fast die schnellste Komprimierungsmethode angibt (weniger Komprimierung) und -9 oder --best die langsamste Komprimierungsmethode angibt ( beste Kompression). Die Standardkomprimierungsstufe ist -6 (dh auf Kosten der Geschwindigkeit auf hohe Komprimierung eingestellt).

  • Wie effektiv wäre es zu verwenden --fast?
  • Verringert dies effektiv die CPU-Auslastung auf einem modernen Computer?

Meine Testergebnisse

Ich habe keine Beschleunigung bemerkt:

  • 7 min, 47 sekunden (mit voreingestelltem verhältnis -6)
  • 8 min, 36 sekunden (mit verhältnis --fast(= 9))

Es scheint also noch länger zu dauern, bis die schnelle Komprimierung verwendet wird?

Nur eine höhere Komprimierung verlangsamt es wirklich:

  • 11 min, 57 sekunden (mit verhältnis --best(= 1))

Nachdem ich die Idee mit bekommen hatte, lzoptestete ich das auch und es ist wirklich schneller:

  • 6 min, 14 sekunden mit lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo


Sind Sie besorgt über die CPU-Zeit oder die Gesamtzeit (Uhrzeit)? --best is 9, --fast is 1.
Stéphane Chazelas

3
Wenn gzip -1es nicht schnell genug ist, benutzelzop
Stéphane Chazelas

1
Es gibt auch lz4welche, die diesen Benchmark noch schneller sehen . Aber lzop und lz4 brauchen offenbar viel mehr Speicher. Wird es ein Problem auf meinem 1 GB RAM Single-Core sein, dass lz4 bei der Komprimierung 30-mal so viel Speicher benötigt wie gzip, wenn ich einige große Datenbanken komprimiere?
Rubo77

lz4 braucht nicht so viel speicher. Wenn Sie das Dienstprogramm lz4c verwenden, wird fast der gesamte Speicher für den E / A-Puffer reserviert. Sie können dies reduzieren, indem Sie kleinere Puffer verwenden (Option -B4 für 64-KB-Puffer). Da kleinere Puffer auch eine schlechtere Komprimierung bedeuten, ist es nützlich, die Verkettungsblockkomprimierung (Option -BD) zu aktivieren. Siehe: fastcompression.blogspot.fr/2013/08/…
Cyan

Antworten:


19

Wenn Sie eine Multi-Core-Maschine haben, die Pigz verwendet, ist dies viel schneller als herkömmliches GZIP .

pigz, das für die parallele Implementierung von gzip steht, ist ein voll funktionsfähiger Ersatz für gzip, der beim Komprimieren von Daten mehrere Prozessoren und mehrere Kerne ausnutzt. pigz wurde von Mark Adler geschrieben und verwendet die Bibliotheken zlib und pthread.

Pigz kann als Ersatz für gzip verwendet werden. Beachten Sie, dass nicht die Dekomprimierung, sondern nur die Komprimierung parallelisiert werden kann.

Mit pigz wird die Kommandozeile

mysqldump "$database_name" | pigz > $BACKUP_DIR/$database_name.sql.gz

Beschleunigt dies auch den Prozess auf einem Single-Core?
Rubo77

@ rubo77 - nein, dies lockert die Komprimierung über mehrere Kerne auf.
SLM

pigzErhöht die CPU-Auslastung, senkt aber die auf Multiprozessoren benötigte Zeit
Stéphane Chazelas

In der Tat, und das ist oft das, was gewünscht wird. Und normalerweise (abhängig von der Hardware) ist die gzip-Komprimierung an die CPU gebunden (Single-Thread-Leistung) und die pigz-Komprimierung ist häufig an die E / A gebunden.
Marco

5

Von man gzip:

   -# --fast --best
          Regulate  the  speed  of compression using the
          specified digit #, where -1  or  --fast  indi‐
          cates  the  fastest  compression  method (less
          compression) and -9 or  --best  indicates  the
          slowest compression method (best compression).
          The default compression level is -6 (that  is,
          biased  towards high compression at expense of
          speed).

3

Wenn es aufgrund von Datenbanksperrproblemen schnell sein muss und Sie über eine ausreichend schnelle / große Festplatte verfügen, um die Daten vorübergehend nicht zu komprimieren, können Sie stattdessen die folgende Methode verwenden:

mysqldump "$database_name" > "$BACKUP_DIR"/"$database_name".sql
nice gzip "$BACKUP_DIR"/"$database_name".sql &

Dh speichern Sie das Backup zuerst (was schneller ist als das Gzippen, wenn der Datenträger schnell und die CPU langsam ist) und lassen Sie das Gzippen dann im Hintergrund ablaufen.

Dadurch können Sie möglicherweise auch einen besseren Komprimierungsalgorithmus verwenden, da es nicht mehr (direkt) darauf ankommt, wie lange die Komprimierung dauert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.