прискорити стиснення gzip


15

Чи можна прискорити gzipпроцес?

Я використовую

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

для резервного копіювання бази даних в каталог, $BACKUP_DIR.

на сторінці написано:

- # --fast - краща Регулюйте
швидкість стиснення за допомогою вказаної цифри #, де -1 або - швидка вказує найшвидший метод стиснення (менше стиснення), а -9 або - кращий вказує на найбільш повільний метод стиснення ( найкраще стиснення). За замовчуванням рівень стиснення становить -6 (тобто упереджений до високої компресії за рахунок швидкості).

  • Наскільки ефективно було б це використовувати --fast?
  • Це ефективно знижує використання процесора на сучасному комп’ютері?

Мої результати тесту

Я не помітив жодного прискорення:

  • 7 хв, 47 секунд (за замовчуванням -6)
  • 8 хв, 36 секунд (у співвідношенні --fast(= 9))

Тож здається, що швидше стиснення потребує ще більше часу?

Тільки вища компресія справді сповільнює це:

  • 11 хв, 57 секунд (у співвідношенні --best(= 1))

Після отримання Ідеї lzopя перевірив це теж, і це дійсно швидше:

  • 6 хв, 14 секунд с lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo


Вас турбує час процесора або загальний (годинний) час?
краща

3
Якщо gzip -1недостатньо швидко, скористайтесяlzop
Stéphane Chazelas

1
Є також те, lz4що ще швидше дивіться цей орієнтир . Але здається, що lzop та lz4 потрібно значно більше пам'яті. чи буде проблемою в моїй одноядерній оперативної пам’яті 1 ГБ, що lz4 використовує в 30 разів більше пам’яті при стисненні, ніж gzip, коли я стискаю деякі великі бази даних?
rubo77

lz4 не потрібно стільки пам’яті. Якщо ви використовуєте утиліту lz4c, тоді майже вся пам'ять виділяється для буфера вводу / виводу. Ви можете зменшити це за допомогою менших буферів (опція -B4 для буферів 64 КБ). Оскільки менші буфери також означають гіршу компресію, корисно включити компресію з ланцюговим блоком (опція -BD). Дивіться: fastcompression.blogspot.fr/2013/08/…
Cyan

Відповіді:


19

Якщо у вас багатоядерна машина, використання pigz набагато швидше, ніж традиційний gzip.

pigz, який розшифровується як паралельна реалізація gzip, є повністю функціональною заміною для gzip, яка експлуатує декілька процесорів та декілька ядер до рукоятки при стисненні даних. pigz був написаний Марком Адлером і використовує бібліотеки zlib та pthread.

Pigz може використовуватися як запасний замінник gzip. Зверніть увагу, що паралелізація може бути тільки стисненням, а не декомпресією.

За допомогою pigz командний рядок стає

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

це також прискорює процес одноядерного?
rubo77

@ rubo77 - це не вентилятори не стискають через декілька ядер.
slm

pigzзбільшує використання процесора, але зменшує час, який він потребує для багатопроцесорних
процесів

Дійсно, і це часто те, що бажано. Зазвичай (залежно від обладнання) стиснення gzip пов'язане з процесором (однопоточна продуктивність), а компресія pigz часто пов'язана з IO.
Марко

5

Від 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

Якщо вам потрібно швидко, через проблеми із блокуванням бази даних, і у вас є достатньо швидкий / великий диск для тимчасового зберігання даних, що не стискаються, ви можете замість цього скористатися цим методом:

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

Тобто спочатку зберігайте резервну копію (що швидше, ніж gzipping її, якщо диск швидкий і процесор повільний), а потім gzipping відбувається у фоновому режимі.

Це також може дозволити використовувати кращий алгоритм стиснення, оскільки це більше не має значення (безпосередньо), скільки часу займає стиснення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.