acelerar a compressão gzip

15

É possível acelerar o gzipprocesso?

estou a usar

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

fazer backup de um banco de dados em um diretório $BACKUP_DIR,.

a página de manual diz:

- # --fast --best
Regula a velocidade da compactação usando o dígito especificado #, em que -1 ou --fast indica o método de compactação mais rápido (menos compactação) e -9 ou --best indica o método de compactação mais lento ( melhor compressão). O nível de compactação padrão é -6 (ou seja, inclinado para alta compactação em detrimento da velocidade).

  • Quão eficaz seria usar --fast?
  • Isso está reduzindo efetivamente o uso da CPU em um computador moderno?

Meus resultados de teste

Não notei nenhuma aceleração:

  • 7 min, 47 segundos (com proporção padrão -6)
  • 8 min, 36 segundos (com proporção --fast(= 9))

Então parece que leva mais tempo para usar a compactação rápida?

Somente uma compressão mais alta realmente diminui a velocidade:

  • 11 min, 57 segundos (com proporção --best(= 1))

Depois de adquirir a idéia lzop, testei isso também e é realmente mais rápido:

  • 6 min, 14 segundos com lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo
rubo77
fonte
Você está preocupado com o tempo da CPU ou o tempo geral (relógio)? --best é 9, --fast é 1. #
Stéphane Chazelas
3
Se gzip -1não for rápido o suficiente, use #lzop
Stéphane Chazelas
1
Há também o lz4que é ainda mais rápido ver este benchmark . Mas parece que lzop e lz4 precisam de muito mais memória. será um problema no meu núcleo único de 1 GB de RAM que o lz4 use 30 vezes mais memória na compactação do que o gzip quando compactar alguns bancos de dados grandes?
rubo77
O lz4 não precisa de tanta memória. Se você estiver usando o utilitário lz4c, quase toda a memória será alocada para o buffer de E / S. Você pode reduzir isso usando buffers menores (opção -B4 para buffers de 64 KB). Como buffers menores também significam pior compactação, é útil habilitar a compactação em bloco encadeado (opção -BD). Veja: fastcompression.blogspot.fr/2013/08/…
Cyan

Respostas:

19

Se você possui uma máquina com vários núcleos, o pigz é muito mais rápido que o gzip tradicional.

O pigz, que significa implementação paralela do gzip, é um substituto totalmente funcional para o gzip que explora vários processadores e vários núcleos ao máximo ao compactar dados. pigz foi escrito por Mark Adler e usa as bibliotecas zlib e pthread.

Pigz ca pode ser usado como um substituto para o gzip. Observe que apenas a compactação pode ser paralelizada, não a descompactação.

Usando pigz, a linha de comando se torna

mysqldump "$database_name" | pigz > $BACKUP_DIR/$database_name.sql.gz
Marco
fonte
isso também acelera o processo em um único núcleo?
rubo77
@ rubo77 - não, isso ventila a compressão em vários núcleos.
slm
pigzaumenta o uso da CPU, mas diminui o tempo de clock que leva em multiprocessadores
Stéphane Chazelas
De fato, e é isso que muitas vezes é desejado. E geralmente (dependendo do hardware) a compactação gzip é vinculada à CPU (desempenho de thread único) e a compactação pigz geralmente é vinculada à E / S.
28913 Marco Marco
5

De 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
fonte
3

Se você precisar ser rápido devido a problemas de bloqueio de banco de dados e tiver um disco rápido / grande o suficiente para reter os dados descompactados temporariamente, considere usar esse método:

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

Ou seja, armazene o backup primeiro (que é mais rápido que compactá-lo se o disco for rápido e a CPU estiver lenta) e, em seguida, faça com que o gzip ocorra em segundo plano.

Isso também pode permitir que você use um algoritmo de compactação melhor, pois não importa mais (diretamente) quanto tempo a compactação leva.

frostschutz
fonte