web-dev-qa-db-ja.com

gzip圧縮を高速化する

gzipプロセスを高速化することは可能ですか?

私は使っています

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

データベースをディレクトリ$BACKUP_DIRにバックアップします。

マンページは言う:

-#--fast --best
指定した数字#を使用して圧縮速度を調整します。ここで、-1または--fastは最も速い圧縮方法(圧縮率が低い)を示し、-9または--bestは最も遅い圧縮方法(最適な圧縮率)を示します。 。デフォルトの圧縮レベルは-6です(つまり、速度を犠牲にして高圧縮に偏っています)。

  • --fastを使用するとどのくらい効果的ですか?
  • これは現代のコンピューターのCPU使用率を効果的に下げていますか?

私のテスト結果

私は加速に気づきませんでした:

  • 7分47秒(デフォルトの比率は-6
  • 8分36秒(比率--fast(= 9))

では、高速圧縮を使用するにはさらに時間がかかるようです。

より高い圧縮のみが本当に遅くなります:

  • 11分57秒(比率--best(= 1))

lzopでアイデアを得た後、私もそれをテストしました。

  • lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzoで6分14秒
15
rubo77

pigz を使用するマルチコアマシンの場合、従来のgzipよりもはるかに高速です。

gzipの並列実装を表すpigzは、データを圧縮するときに複数のプロセッサと複数のコアを活用してgzipを完全に機能的に置き換えるものです。 pigzはMark Adlerによって作成され、zlibおよびpthreadライブラリを使用しています。

Pigzはgzipのドロップイン代替として使用できます。並列化できるのは圧縮のみであり、解凍はできないことに注意してください。

Pigzを使用すると、コマンドラインは次のようになります。

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

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

データベースのロック問題のために高速にする必要があり、データを一時的に解凍するために十分な高速/大容量のディスクがある場合は、代わりにこの方法を使用することを検討できます。

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

つまり最初にバックアップを保存し(ディスクが高速でCPUが遅い場合はgzip圧縮よりも高速です)、次にgzip圧縮をバックグラウンドで実行します。

これにより、圧縮にかかる時間は(直接)重要ではなくなるため、より優れた圧縮アルゴリズムを使用できる場合もあります。

3
frostschutz