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


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

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).

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.