表数据压缩配置在 MariaDB 10.2 与 MySQL 5.7 中算法效率对比?

文章导读
根据 2023 年 5 月 17 日发布的测试数据,MySQL 5.7 透明页压缩使用 zlib 算法可实现 28.26% 的压缩率,而字段压缩使用 zlib 算法压缩率可达 21.30%,但两者在写入性能上存在显著差异(12 分 21 秒 vs 17 分 37 秒)。
📋 目录
  1. A 原因分析
  2. B 解决方案
  3. C 注意事项
  4. D 参考来源
A A

表数据压缩配置在 MariaDB 10.2 与 MySQL 5.7 中算法效率对比

根据 2023 年 5 月 17 日发布的测试数据,MySQL 5.7 透明页压缩使用 zlib 算法可实现 28.26% 的压缩率,而字段压缩使用 zlib 算法压缩率可达 21.30%,但两者在写入性能上存在显著差异(12 分 21 秒 vs 17 分 37 秒)。

原因分析

InnoDB 表数据压缩在 MySQL 5.7 中引入了透明页压缩功能,而 MySQL 5.1 版本就已具备记录压缩功能。透明页压缩以 InnoDB 的 page 为单位,粒度较粗,需要文件系统支持 punch hole。MariaDB 从 2012 年 11 月 12 日起发布的 10.0.0 版开始不再依照 MySQL 的版号,10.0.9 版起使用 XtraDB(名称代号为 Aria)来代替 MySQL 的 InnoDB 存储引擎。这意味着两者的压缩实现机制存在底层差异,MariaDB 的字段压缩不仅支持 InnoDB,其他存储引擎也可以使用,而 MySQL 官方版本主要支持记录压缩和透明页压缩。

解决方案

MySQL 5.7 压缩配置步骤

1. 启用透明页压缩:在创建表时指定 COMPRESSION 参数,例如CREATE TABLE t1 (id INT) COMPRESSION='zlib'。根据测试数据,zlib 算法在透明页压缩下文件大小为 6.5,压缩率 28.26%,索引查询性能 24.03 秒。

2. 选择压缩算法:MySQL 5.7 支持 zlib、lz4、zstd 三种算法。测试数据显示 lz4 压缩率 37.39%(文件大小 8.6),写入性能 10 分 14 秒;zstd 压缩率 28.69%(文件大小 6.6),写入性能 10 分 14 秒。

MariaDB 10.2 压缩配置步骤

1. MariaDB 支持字段压缩,可为某个表中的一个或多个字段启用字段压缩。根据 2020 年 2 月 21 日的资料,MariaDB 的 API 和协议兼容 MySQL,所有使用 MySQL 的连接器、程序库和应用程序也可以在 MariaDB 下工作。

表数据压缩配置在 MariaDB 10.2 与 MySQL 5.7 中算法效率对比?

2. 压缩算法选择:字段压缩测试数据显示,zlib 压缩率 21.30%(文件大小 4.9),索引查询性能 1.41 秒;lz4 压缩率 36.95%(文件大小 8.5),索引查询性能 1.48 秒;zstd 压缩率 20.00%(文件大小 4.6),索引查询性能 1.07 秒。目前公开资料中未找到 MariaDB 10.2 具体的压缩配置参数文档。

性能对比数据

根据 2017 年 11 月 8 日的 MySQL 5.7 GR 与 MariaDB 10.1.19 Galera Cluster 性能压测数据,在 128 线程下,GR 的 TPS 在 768.46 到 1083.11 之间波动,响应时间(95%)在 189.03ms 到 360.43ms 之间。2020 年 5 月 22 日有用户反馈将大型(3+ GB)数据库从 MySQL 迁移到 MariaDB 10.4.13 后,在特定查询性能方面存在问题,尽管对数据库进行了分析、优化、重建。

注意事项

1. 文件系统限制:透明页压缩需要文件系统支持 punch hole,基于共享存储的云原生数据库方案如 PolarFS 不支持 punch hole,因此不能使用透明页压缩功能(2023 年 5 月 17 日资料)。

表数据压缩配置在 MariaDB 10.2 与 MySQL 5.7 中算法效率对比?

2. 压缩率与性能权衡:字段压缩在同样压缩算法下,整体压缩率会相对差一点,但查询性能更优。例如字段压缩 zlib 索引查询性能 1.41 秒,而透明页压缩 zlib 为 24.03 秒(2023 年 5 月 17 日测试数据)。

3. 适用场景:字段压缩适合用在表中有大字段、这部分字段占了大部分存储空间的场景,如用户表存储用户个人信息的字符串类字段。如果平时对该表的访问较少涉及被压缩的字段,字段压缩能够节省存储空间又不影响查询性能。

4. 版本兼容性:MariaDB 直到 5.5 版本均依照 MySQL 的版本,从 10.0.0 版开始独立版本号。迁移时需注意 2020 年 5 月 22 日记录的性能问题案例,大型数据库迁移后可能出现特定查询性能下降。

参考来源

来源:知乎 - 在降本增效背景下谈 MySQL 压缩功能(2023 年 5 月 17 日发布)

表数据压缩配置在 MariaDB 10.2 与 MySQL 5.7 中算法效率对比?

来源:阿里云开发者社区 - 详谈 MySQL 和 MariaDB 区别与性能全面对比(2020 年 2 月 21 日)

来源:Stack Overflow - MariaDB 10.4.13 与 MySQL 5.7.30 相比性能缓慢(2020 年 5 月 22 日)

来源:阿里云开发者社区 - MySQL5.7 GR VS MariaDB10.1.19 Galera Cluster 性能压测(2017 年 11 月 8 日)