修改innodb_compression_level会产生什么影响?是否仅作用于新写入及更新行?
关于调整
innodb_compression_level的影响说明 1. 对现有行数据的影响
调整参数后,已经持久化到磁盘的现有压缩行数据不会受到任何影响。
InnoDB的压缩逻辑是在数据页刷入磁盘的阶段执行的,已存储的压缩页是使用写入时的压缩级别生成的,参数修改不会触发已有数据的自动重压缩。
2. 参数生效范围
该配置确实优先对新写入、更新的行生效,此外还有两种额外的生效场景:
- 旧数据页被加载到缓冲池后发生修改,再次刷回磁盘时会使用新的压缩级别重新压缩
- 手动执行
OPTIMIZE TABLE、ALTER TABLE 表名 FORCE等表重构操作,或者后台InnoDB自动触发页合并/清理操作时,涉及的旧页也会按新的压缩级别写入
3. 适配你场景的注意事项
- 压缩级别从6下调到3,zlib压缩耗时通常会下降40%~60%,可以直接缓解写入路径的CPU开销,匹配你当前CPU瓶颈的优化需求,写入速度提升会比较明显
- 该参数是全局动态参数,不需要重启实例,执行
SET GLOBAL innodb_compression_level = 3;即可即时生效 - 下调压缩级别会带来10%~30%左右的磁盘空间占用上升,建议提前预留足够的磁盘容量
- zlib的解压速度几乎不受压缩级别影响,如果你没有额外的旧数据压缩率优化需求,不需要手动重构旧表,避免产生大量额外IO影响线上业务
内容的提问来源于stack exchange,提问作者Thomas Miller
相关产品推荐
相关产品推荐

