我正在运行这个命令:
pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2
这需要太长时间。 我看着top
的进程。 bzip2进程大约占95%,postgres占一个核心的5%。 wa
入口很低。 这意味着磁盘不是瓶颈。
我能做些什么来提高性能?
也许让bzip2使用更多的核心。 这些服务器有16个内核。
或使用替代bzip2?
我能做些什么来提高性能?
周围有很多压缩algorithm,而bzip2
是较慢的压缩algorithm之一。 平原gzip
往往是明显更快,通常没有太多糟糕的压缩。 当速度是最重要的, lzop
是我的最爱。 可怜的压缩,但哦,这么快。
我决定有一些乐趣,并比较一些algorithm,包括它们的并行实现。 input文件是我的工作站上的pg_dumpall
命令的输出,一个1913 MB的SQL文件。 硬件是一个较旧的四核i5。 时间是压缩的时钟时间。 并行实现设置为使用全部4个内核。 按压缩速度sorting的表。
Algorithm Compressed size Compression Decompression lzop 398MB 20.8% 4.2s 455.6MB/s 3.1s 617.3MB/s lz4 416MB 21.7% 4.5s 424.2MB/s 1.6s 1181.3MB/s brotli (q0) 307MB 16.1% 7.3s 262.1MB/s 4.9s 390.5MB/s brotli (q1) 234MB 12.2% 8.7s 220.0MB/s 4.9s 390.5MB/s zstd 266MB 13.9% 11.9s 161.1MB/s 3.5s 539.5MB/s pigz (x4) 232MB 12.1% 13.1s 146.1MB/s 4.2s 455.6MB/s gzip 232MB 12.1% 39.1s 48.9MB/s 9.2s 208.0MB/s lbzip2 (x4) 188MB 9.9% 42.0s 45.6MB/s 13.2s 144.9MB/s pbzip2 (x4) 189MB 9.9% 117.5s 16.3MB/s 20.1s 95.2MB/s bzip2 189MB 9.9% 273.4s 7.0MB/s 42.8s 44.7MB/s pixz (x4) 132MB 6.9% 456.3s 4.2MB/s 7.9s 242.2MB/s xz 132MB 6.9% 1027.8s 1.9MB/s 17.3s 110.6MB/s brotli (q11) 141MB 7.4% 4979.2s 0.4MB/s 3.6s 531.6MB/s
如果你的服务器的16个内核空间足够大,所有的可用于压缩, pbzip2
可能会给你一个非常显着的加速。 但是,你仍然需要更多的速度,你可以容忍大约20%的大文件, gzip
可能是你最好的select。
更新:我添加了brotli
(请参阅TOOGAMs答案)结果到表中。 brotli
的压缩质量设置对压缩比和速度有很大的影响,所以我增加了三个设置( q0
, q1
和q11
)。 默认是q11
,但是速度非常慢,比xz
还差。 q1
看起来非常好, 与gzip
相同的压缩比,但速度是4-5倍!
更新:添加lbzip2
(请参阅gmathts评论)和zstd
(Johnny的评论)到表中,并按压缩速度sorting。 lbzip2
将bzip2
系列的压缩比pbzip2
了三倍, pbzip2
的运行速度更快! zstd
看起来也很合理,但是在比例和速度上都被brotli (q1)
击败。
我原来的结论是,简单的gzip
是最好的赌注开始看起来几乎愚蠢。 虽然无处不在,但还是不能被打败;)
使用pbzip2。
手册说:
pbzip2是一个bzip2块分类文件压缩器的并行实现,它使用pthreads并在SMP机器上实现接近线性的加速。 这个版本的输出完全兼容bzip2 v1.0.2或更新版本(即:任何使用pbzip2压缩的文件都可以用bzip2解压缩)。
它会自动检测您拥有的处理器数量并相应地创build线程。
一些数据:
Brotli,Deflate,Zopfli,LZMA,LZHAM和Bzip2压缩algorithm的比较
CanIUse.com:function:brotli显示了Microsoft Edge,Mozilla Firefox,Google Chrome,Apple Safari,Opera(但不包括Opera Mini或Microsoft Internet Explorer)的支持。
比较:Brotli vs deflate vs zopfli vs lzma vs lzham vs bzip2
比较:7-Zip ZStandard方法的压缩比与压缩速度
你没有提到一个操作系统。 如果是Windows, 带有ZStandard(Releases)的7-Zip是7-Zip版本,已经被修改为支持使用所有这些algorithm。
使用zstd 。 如果Facebook足够好,那么对于你来说也可能够好。
更严重的一点是,这其实很不错 。 我现在用它来处理所有事情,因为它可以正常工作,而且它可以让你大规模交易速度(大多数情况下,因为存储价格便宜,速度比物理尺寸还重要,但速度是瓶颈)。
在达到与bzip2类似的整体压缩的压缩级别下,它的速度要快得多,如果你愿意花费一些额外的CPU时间,你几乎可以获得与LZMA类似的结果(尽pipe这样会比bzip2慢)。 在压缩比极低的情况下,它比bzip2或其他主streamselect要快得多。
现在,你正在压缩一个SQL转储,而这个转储就像是尴尬的压缩一样。 即使是最差的压缩机在这种数据上也得分很高。
因此,您可以使用较低的压缩级别运行zstd
,该级别的运行速度将提高几十倍 ,并且仍然可以在该数据上实现95-99%的相同压缩率。
作为奖励,如果您经常这样做,并且想要投入一些额外的时间,则可以提前“训练” zstd
压缩机,这将提高压缩比和速度。 请注意,为了使训练工作顺利,您将需要为其提供个人logging,而不是整个事情。 该工具的工作方式,它期望许多小的和有点相似的样本训练,而不是一个巨大的一滴。