我正在运行以下命令:
pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2时间太长了。我使用top查看流程。bzip2过程约占核心的95%,postgres占5%。wa条目很低。这意味着磁盘不是瓶颈。
我能做些什么来提高性能呢?
也许让bzip2使用更多的内核。服务器有16个核心。
还是使用bzip2的替代方案?
我能做些什么来提高性能呢?
发布于 2017-09-08 23:40:16
目前有许多压缩算法,而bzip2是较慢的压缩算法之一。普通的gzip往往要快得多,通常情况下压缩效果并不差。当速度是最重要的时候,lzop是我最喜欢的。压缩效果很差,但是速度太快了。
我决定找点乐子,比较几种算法,包括它们的并行实现。输入文件是我的工作站上的pg_dumpall命令的输出,这是一个1913 MB的SQL文件。硬件是一个较老的四核i5。时间是墙钟的时间只是压缩。并行实现被设置为使用所有4个核心。按压缩速度排序的表。
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可能是你最好的选择。
更新:我将brotli (参见TOOGAMs答案)结果添加到表中。brotlis压缩质量设置对压缩比和速度影响很大,因此我添加了三个设置(q0、q1和q11)。默认情况是q11,但是它非常慢,而且比xz还要糟糕。不过,q1看起来非常好;压缩比与gzip相同,但速度是4-5倍!
更新:将lbzip2 (请参阅gmathts注释)和zstd (约翰尼的注释)添加到表中,并按压缩速度对其进行排序。lbzip2通过压缩速度是pbzip2的三倍使bzip2家族恢复正常,压缩比很高!zstd看起来也很合理,但在比率和速度上都被brotli (q1)打败了。
我最初的结论是,朴素的gzip是最好的选择,现在看起来几乎是愚蠢的。虽然对于普遍存在,它仍然是不可战胜的;)
发布于 2017-09-08 19:22:15
使用pbzip2。
手册说:
pbzip2是bzip2块排序文件压缩器的并行实现,它使用线程并在SMP机器上实现近乎线性的加速比。此版本的输出与bzip2 v1.0.2或更高版本完全兼容(即:使用pbzip2压缩的任何内容都可以用bzip2解压缩)。
它自动检测您拥有的处理器数量,并相应地创建线程。
发布于 2017-09-10 15:37:28
使用zstd。如果它对Facebook来说足够好的话,那么它可能对你也足够好。
更严肃的是,这其实很不错。我现在将它用于所有的东西,因为它只是起作用,它允许你用速度来换取大规模的比率(大多数情况下,速度比大小更重要,因为存储成本很低,但是速度是一个瓶颈)。
在实现与bzip2类似的整体压缩的压缩级别上,它要快得多,而且如果您愿意在CPU时间内支付一些额外的费用,您几乎可以获得类似于LZMA的结果(尽管那样它将比bzip2慢)。在最糟糕的压缩比下,它比bzip2或其他主流的替代方案要快得多。
现在,您正在压缩一个SQL转储,这几乎是令人尴尬的琐碎压缩。即使是最穷的压缩机也能很好地利用这种数据。
因此,您可以以较低的压缩级别运行zstd,它将运行数十倍的速度,并且仍然可以实现对数据的95%-99%的相同压缩。
作为一种奖励,如果您经常这样做,并希望投资一些额外的时间,您可以“培训”的zstd压缩机提前,这提高了压缩比和速度。请注意,要使培训正常工作,您需要为其提供单独的记录,而不是全部内容。按照这个工具的工作方式,它期望有许多小样本和一些类似的样本用于培训,而不是一个巨大的blob。
https://serverfault.com/questions/872749
复制相似问题