知识卡片

WAL日志压缩:用CPU开销换取更少的磁盘与网络传输量

普通读书笔记卡

内容

PostgreSQL的WAL(预写日志)以固定单位(16MB)保存文件,且会同时记录数据写入前和写入后的信息,因此在大量UPDATE、DELETE操作后WAL文件会持续膨胀,这不仅占用本地归档空间,如果还要把WAL传输到远端网络存储或磁带机做异地备份,也会大量占用网络带宽。PostgreSQL 9.5引入的WAL日志压缩功能,是在写日志时就对数据块本身进行压缩,用磁盘写入量和网络传输量的下降,去换取CPU消耗的上升——往磁盘写更少的数据、需要复制传输的数据量也更少,代价是压缩解压过程本身消耗额外的CPU资源。这是一个典型的”用相对充裕的计算资源(CPU)换取相对稀缺的I/O与网络带宽资源”的权衡设计,在I/O或带宽已经成为系统瓶颈、而CPU还有余量的场景下,这类”以计算换传输”的思路具有普遍参考价值。

参考来源

- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.10 从Postgres95到PostgreSQL9.5:新版亮眼特性"节,"6.10.3 PostgresSQL9.5的亮眼特性"(源文件:_epub-src/OEBPS/Text/Chapter6_10_4.xhtml) - 结论依据:原文说明"PostgreSQL以16MB为单位保存WAL日志文件,由于日志文件会保存数据写入前及写入后的信息,因此在大量UPDATE及DELETE操作后WAL会持续增大……PostgreSQL 9.5提供了WAL日志压缩功能来解决此问题,写日志时对数据块进行压缩。往磁盘写更少的数据,复制的传输的量也会少,可以更新的性能提高,但CPU的消耗量会上升",直接支撑本卡片结论。 - 原始内容:PostgreSQL以16MB为单位保存WAL日志文件……PostgreSQL 9.5提供了WAL日志压缩功能来解决此问题,写日志时对数据块进行压缩。往磁盘写更少的数据,复制的传输的量也会少,可以更新的性能提高,但CPU的消耗量会上升。