przyspieszyć kompresję gzip

15

Czy można przyspieszyć gzipproces?

używam

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

do tworzenia kopii zapasowych bazy danych do katalogu $BACKUP_DIR.

strona mówi:

- # - fast --best Ustaw
prędkość kompresji za pomocą określonej cyfry #, gdzie -1 lub --fast wskazuje najszybszą metodę kompresji (mniejszą kompresję), a -9 lub --best wskazuje najwolniejszą metodę kompresji ( najlepsza kompresja). Domyślny poziom kompresji to -6 (tzn. Nastawiony na wysoką kompresję kosztem prędkości).

  • Jak efektywne byłoby użycie --fast?
  • Czy to skutecznie obniża zużycie procesora na nowoczesnym komputerze?

Moje wyniki testu

Nie zauważyłem żadnego przyspieszenia:

  • 7 min, 47 sekund (z domyślnym współczynnikiem -6)
  • 8 min, 36 sekund (ze współczynnikiem --fast(= 9))

Więc wydaje się, że użycie szybkiej kompresji zajmuje jeszcze więcej czasu?

Tylko wyższa kompresja naprawdę go spowalnia:

  • 11 min, 57 sekund (ze współczynnikiem --best(= 1))

Po otrzymaniu Pomysłu lzopprzetestowałem to i jest to naprawdę szybsze:

  • 6 min, 14 sekund z lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo
rubo77
źródło
Czy martwi Cię czas procesora lub całkowity czas (zegar)? - najlepszy jest 9, - szybki jest 1.
Stéphane Chazelas
3
Jeśli gzip -1nie jest wystarczająco szybki, użyjlzop
Stéphane Chazelas
1
Jest też, lz4który jest jeszcze szybszy zobacz ten punkt odniesienia . Ale wydaje się, że lzop i lz4 potrzebują znacznie więcej pamięci. czy będzie problem na mojej 1-rdzeniowej pamięci RAM, że lz4 używa 30 razy więcej pamięci podczas kompresji niż gzip, gdy kompresuję niektóre duże bazy danych?
rubo77
LZ4 nie potrzebuje tyle pamięci. Jeśli używasz narzędzia lz4c, prawie cała pamięć jest przydzielona na bufor we / wy. Możesz to zmniejszyć, używając mniejszych buforów (opcja -B4 dla buforów 64 KB). Ponieważ mniejsze bufory oznaczają również gorszą kompresję, warto włączyć kompresję blokową (opcja -BD). Zobacz: fastcompression.blogspot.fr/2013/08/…
Cyan

Odpowiedzi:

19

Jeśli masz maszynę wielordzeniową, używając Pigz jest znacznie szybszy niż tradycyjny gzip.

pigz, który oznacza równoległą implementację gzip, jest w pełni funkcjonalnym zamiennikiem gzip, który wykorzystuje wiele procesorów i wiele rdzeni do rękojeści podczas kompresji danych. pigz został napisany przez Marka Adlera i korzysta z bibliotek zlib i pthread.

Pigz może być używany jako drop-in zamiennik gzip. Uwaga: można sparaliżować tylko kompresję, a nie dekompresję.

Za pomocą pigz staje się wierszem poleceń

mysqldump "$database_name" | pigz > $BACKUP_DIR/$database_name.sql.gz
Marco
źródło
czy to również przyspiesza proces na jednym rdzeniu?
rubo77
@ rubo77 - nie, ta wentylacja nie powoduje kompresji wielu rdzeni.
slm
pigzzwiększa użycie procesora, ale zmniejsza czas potrzebny na procesory wieloprocesorowe
Stéphane Chazelas
Rzeczywiście, i to często jest pożądane. I zwykle (w zależności od sprzętu) kompresja gzip jest związana z procesorem (wydajność jednowątkowa), a kompresja pigz jest często związana z operacjami we / wy.
Marco,
5

Od 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).
terdon
źródło
3

Jeśli potrzebujesz, aby był szybki z powodu problemów z blokowaniem bazy danych, a masz wystarczająco szybki / duży dysk do tymczasowego przechowywania danych nieskompresowanych, możesz zamiast tego rozważyć użycie tej metody:

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

Najpierw przechowuj kopię zapasową (co jest szybsze niż gzipowanie JEŻELI dysk jest szybki, a procesor jest wolny), a następnie niech zgrywanie odbywa się w tle.

Może to również pozwolić na użycie lepszego algorytmu kompresji, ponieważ nie ma już znaczenia (bezpośrednio) czas kompresji.

frostschutz
źródło