gzip sıkıştırmasını hızlandır


15

gzipSüreci hızlandırmak mümkün mü ?

kullanıyorum

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

bir veritabanını bir dizine yedeklemek için $BACKUP_DIR.

manpage diyor ki:

- # --fast --best
Belirtilen # rakamını kullanarak sıkıştırma hızını düzenleyin; burada -1 veya --fast en hızlı sıkıştırma yöntemini gösterir (daha az sıkıştırma) ve -9 veya --best en yavaş sıkıştırma yöntemini gösterir ( en iyi sıkıştırma). Varsayılan sıkıştırma seviyesi -6'dır (yani hız pahasına yüksek sıkıştırmaya doğru eğilimli).

  • Kullanmak ne kadar etkili olurdu --fast?
  • Bu, modern bir bilgisayarda CPU kullanımını etkili bir şekilde düşürüyor mu?

Test sonuçlarım

Herhangi bir ivme fark etmedim:

  • 7 dk, 47 saniye (varsayılan oran ile -6)
  • 8 dk, 36 saniye (oranlı --fast(= 9))

Yani hızlı sıkıştırmayı kullanmak daha uzun sürüyor mu?

Sadece daha yüksek sıkıştırma gerçekten yavaşlatır:

  • 11 dk, 57 saniye (oranlı --best(= 1))

Fikir aldıktan sonra lzopben de test ve gerçekten daha hızlı:

  • 6 dakika, 14 saniye ile lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo


CPU zamanı veya toplam (saat) zamanı hakkında endişeleriniz mi var? --best 9, --fast 1'dir.
Stéphane Chazelas

3
Eğer gzip -1kullanımı yeterince hızlı değillzop
Stéphane Chazelas

1
Daha lz4da hızlı olan bu kriterlere bakın . Ama öyle görünüyor ki lzop ve lz4 çok daha fazla belleğe ihtiyaç duyuyor. 1GB RAM tek çekirdeğimde, bazı büyük veritabanlarını sıkıştırdığımda lz4'ün sıkıştırmada gzip'ten 30 kat daha fazla bellek kullanması bir sorun olacak mı?
rubo77

lz4 bu kadar belleğe ihtiyaç duymaz. Lz4c yardımcı programını kullanıyorsanız, hemen hemen tüm bellek G / Ç arabelleği için ayrılır. Daha küçük arabellekleri kullanarak bunu azaltabilirsiniz (64KB arabellekler için -B4 seçeneği). Daha küçük arabellekler daha kötü sıkıştırma anlamına da geldiğinden, zincirleme blok sıkıştırmayı (seçenek -BD) etkinleştirmek yararlıdır. Bakınız: fastcompression.blogspot.fr/2013/08/…
Mavi

Yanıtlar:


19

Çok çekirdekli bir makineniz varsa pigz geleneksel gzip'ten çok daha hızlıdır.

gzip'in paralel uygulanması anlamına gelen pigz, verileri sıkıştırırken birden çok işlemciyi ve birden çok çekirdeği sömürüye kullanan gzip'in tamamen işlevsel bir yerine geçer. pigz, Mark Adler tarafından yazıldı ve zlib ve pthread kütüphanelerini kullanıyor.

Pigz ca, gzip'in yerini alan bir yedek olarak kullanılabilir. Dekompresyona değil, sadece sıkıştırma paralelleştirilebilir.

Pigz kullanarak komut satırı

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

bu aynı zamanda süreci tek çekirdekli olarak hızlandırır mı?
rubo77

@ rubo77 - hayır bu çoklu çekirdekler arasındaki sıkıştırmayı sevmiyor.
slm

pigzCPU kullanımını artırıyor ancak çoklu işlemcilerde harcanan zamanı azaltır
Stéphane Chazelas

Gerçekten de, çoğu zaman istenen budur. Ve genellikle (donanıma bağlı olarak) gzip sıkıştırması CPU'ya bağlıdır (tek iplik performansı) ve pigz sıkıştırması genellikle IO'ya bağlıdır.
Marco

5

Gönderen 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

Veritabanı kilitleme sorunları nedeniyle hızlı olması gerekiyorsa ve verileri geçici olarak sıkıştırılmadan tutacak kadar hızlı / büyük bir diskiniz varsa, bunun yerine bu yöntemi kullanmayı düşünebilirsiniz:

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

İlk önce yedeklemeyi depolayın (disk hızlı ve CPU yavaşsa gzipping'den daha hızlıdır) ve ardından gzipleme arka planda gerçekleşir.

Bu, sıkıştırmanın ne kadar sürdüğü artık (doğrudan) önemli olmadığından, daha iyi bir sıkıştırma algoritması kullanmanıza da izin verebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.