内容提要
本文通过真实数据比较了pgBackRest各压缩算法与级别,以寻找CPU与备份大小的最佳平衡。结论:Zstandard低级别最优,默认zst(3)处于曲线拐点,节省约65%空间且CPU仅59秒;zst(22)备份最小但CPU高约88倍。LZ4适合快速廉价场景,gzip在5级后收益甚微,bzip2始终不占优。建议选用zst并保持低级别。
延伸解读
默认设置的实际表现
pgBackRest 默认使用 gz(6),但测试显示 zst(3) 在节省约 65% 空间的同时仅消耗 59 CPU 秒,而 gz(9) 需要 2.8 倍 CPU 却只多节省 0.2 个百分点。因此,若未调整压缩设置,切换到 zst(3) 能以相近或更低的 CPU 成本获得更好的压缩率。
高压缩级别的代价
zst(22) 虽然备份文件最小(节省 74%),但 CPU 消耗高达 5217 秒,是 zst(3) 的约 88 倍,仅多节省 9 个百分点。类似地,zst 的 19 至 22 级需要 45 至 90 倍 CPU 却只有个位数收益。因此,除非存储空间极度紧张,否则不建议使用超高压缩级别。
算法选择指南
LZ4 在低级别(1 或以下)适合快速廉价场景,但高于默认级别后完全被 zst 超越。gzip 在 5 级后收益甚微,且任何级别都不如 zst 高效。bzip2 始终不占优,其压缩率与 zst(9) 相当但 CPU 更高。综合来看,zst 低级别是大多数场景的最佳选择。
数据特性影响压缩效果
压缩率因表而异:数值型表(如 votes、badges)可压缩 5 倍以上,而文本主体仅 2.5 至 3 倍。特别地,posts TOAST 仅压缩 1.4 倍,因为 PostgreSQL 已对其压缩。因此,实际备份的压缩收益取决于数据库模式,建议在代表性数据上测试后再确定设置。
Q&A
pgBackRest 默认使用哪种压缩算法和级别?
pgBackRest 默认使用 gzip 算法,级别为 6,即 gz(6)。
pgBackRest 中 Zstandard 压缩的最佳级别是哪个?
Zstandard 的最佳级别是低级别,默认的 zst(3) 处于曲线拐点,节省约 65% 空间且仅消耗 59 CPU 秒,是性价比最高的选择。
使用 zst(22) 压缩备份的代价和收益是什么?
zst(22) 能获得最小的备份文件(节省 74% 空间),但 CPU 消耗高达 5217 秒,约为 zst(3) 的 88 倍,仅多节省约 9 个百分点,性价比极低。
LZ4 压缩在 pgBackRest 中适合什么场景?
LZ4 适合快速廉价的场景,尤其在级别 1 或以下时效率高;但级别 3 以上 CPU 消耗剧增而收益不变,此时不如使用 zst。
gzip 压缩在 pgBackRest 中级别超过 5 后还有收益吗?
gzip 在级别 5 后收益甚微,gz(9) 相比 gz(6) 多消耗 2.8 倍 CPU 仅多节省 0.2 个百分点,且在所有级别上都被 zst 以相同成本超越。
bzip2 压缩在 pgBackRest 中表现如何?
bzip2 始终不占优,节省率在 63% 到 68% 之间,CPU 消耗 411 到 464 秒,且 zst(9) 能以更低 CPU 达到相同节省率,因此没有使用场景。
pgBackRest 压缩设置对备份窗口有何影响?
压缩设置同时影响 CPU 成本和备份速度,吞吐量曲线与 CPU 成本曲线拐点一致,因此选择低 CPU 的设置也能更快完成备份,无需为备份窗口单独权衡。
如何为 pgBackRest 选择压缩设置?
建议选择 Zstandard 并保持低级别(如默认的 zst(3)),并在生产环境更改前用代表性数据测量,因为模式和数据混合会影响拐点位置。