我的编程空间,编程开发者的网络收藏夹
学习永远不晚

新特性解读 | binlog 压缩

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

新特性解读 | binlog 压缩

新特性解读 | binlog 压缩


二进制日志(binlog)是 MySQL 日志结构中重要的部分;记录了数据的更改操作,用于数据恢复、数据复制以及审计。然而在众多实际场景中经常发生高并发引起 binlog 暴涨的问题将挂载点空间占满以及主从网络带宽成为瓶颈时主从延时过大。8.0.20 版本推出 binlog 压缩功能,有效缓解甚至解决此类问题。

一、特性描述

MySQL 从 8.0.20 开始集成 ZSTD 算法,开启压缩功能后;以事务为单位进行压缩写入二进制日志文件,降低原文件占用的磁盘空间。压缩后的事务以压缩状态有效负载在复制流中发送到从库(MGR 架构中为组 member)或客户端(例如 mysqlbinlog)。 官网连接:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html

二、原理分析

开启压缩功能后,通过 ZSTD 算法对每个事务进行压缩,写入二进制日志。

新版本更改了 libbinlogevents,新增 Transaction_payload_event 作为压缩后的事务表示形式。

class Transaction_payload_event : public Binary_log_event {
 protected:
  const char *m_payload;
  uint64_t m_payload_size;
  transaction::compression::type m_compression_type;
  uint64_t m_uncompressed_size;

新增 Transaction_payload_event 编码器/解码器,用于实现对压缩事务的编码和解码。

namespace binary_log {
namespace transaction {
namespace compression {

enum type {
  
  NONE = 0,

  
  ZSTD = 1,
};

在 mysqlbinlog 中设计和实现每个事务的解压缩和解码,读取出来的日志与未经压缩的原日志相同,并打印输出所用的压缩算法,事务形式,压缩大小和未压缩大小,作为注释。

#200505 16:24:24 server id 1166555110  end_log_pos 2123 CRC32 0x6add0216    Transaction_Payload     payload_size=863    compression_type=ZSTD   uncompressed_size=2184
# Start of compressed events!

从库(或 MGR-member)在接收已压缩的 binlog 时识别 Transaction_payload_event,不进行二次压缩或解码。以原本的压缩状态写入中继日志;保持压缩状态。回放日志的解码和解压缩过程由 SQL 线程负责。

总结日志压缩过程为:

1)单位事务需要提交并记录 binlog。

2)压缩编码器在缓存中通过 ZSTD 算法压缩以及编码该事务。

3)将缓存中压缩好的事务写入日志中,落盘。

日志读取过程为:

客户端工具(mysqlbinlog、sql 线程)对压缩日志进行解压缩、解码。解压出原本未压缩的日志进行读取或回放。

三、注意事项

压缩功能以事务为单位进行压缩,不支持非事务引擎。

仅支持对 ROW 模式的 binlog 进行压缩。

目前仅支持 ZSTD 压缩算法,但是,底层设计是开放式的,因此后续官方可能会根据需要添加其他压缩算法(例如 zlib 或 lz4)。

压缩动作是并行进行的,并且发生在 binlog 落盘之前的缓存步骤中。

压缩过程占用本机 CPU 及内存资源。在主从延迟的场景中,如果性能瓶颈时网络带宽,压缩功能可以有效缓解主从延迟;但是如果性能瓶颈是本机自身处理能力,那么压缩功能反而可能加大主从延迟。

四、特性测试

MySQL 版本:8.0.20

架构:一主一从半同步

测试方案:

搭建好 MySQL 8.0.20 的主从架构

主从上开启压缩功能、并设置压缩等级,默认为 3,随着压缩级别的增加,数据压缩率也会增加,但同时 CPU 及内存的资源消耗也将增加。

mysql> set  binlog_transaction_compression=on;
mysql> set  binlog_transaction_compression_level_zstd=10;

查看压缩前后相同 SQL 产生的 binlog 大小。

压缩前 binlog 大小约为 300M

-rw-r----- 1 mysql mysql 251M May  6 09:31 mysql-bin.000001
-rw-r----- 1 mysql mysql  50M May  6 09:31 mysql-bin.000002

压缩后 binlog 大小约 150M

-rw-r----- 1 mysql mysql 148M May  6 09:32 mysql-bin.000004

查看压缩前后相同 SQL 在低主从带宽的网络环境中 tps 的比较。

限制网络速率

tc qdisc add dev eth0 root handle 1:0 netem delay 100ms
tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000

压缩前压测结果:

SQL statistics:
    queries performed:
        read:                            3976
        write:                           1136
        other:                           568
        total:                           5680
    transactions:                        284    (9.17 per sec.)
    queries:                             5680   (183.32 per sec.)

压缩后压测结果:

SQL statistics:
    queries performed:
        read:                            4746
        write:                           1356
        other:                           678
        total:                           6780
    transactions:                        339    (10.15 per sec.)
    queries:                             6780   (202.92 per sec.)

结论

MySQL 新推出的 binlog 压缩功能,当压缩级别设置为 10 时,压缩率约为 50% 左右,能够较大程度减少 binlog 所占用的空间。

压缩功能能够一定程度提升因网络带宽所带来的主从延迟,提升集群 tps。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

新特性解读 | binlog 压缩

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

新特性解读 | binlog 压缩

二进制日志(binlog)是 MySQL 日志结构中重要的部分;记录了数据的更改操作,用于数据恢复、数据复制以及审计。然而在众多实际场景中经常发生高并发引起 binlog 暴涨的问题将挂载点空间占满以及主从网络带宽成为瓶颈时主从延时过大。8.0.20 版本推出
新特性解读 | binlog 压缩
2018-06-10

新特性解读 | mysql 8.0 memcached api 新特性

作者:杨涛涛资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、My
新特性解读 | mysql 8.0 memcached api 新特性
2017-07-06

Java 10 新特性解读

Java 10 是 JDK 的第十个版本,于 2018 年 3 月发布。Java 10 引入了一些新的特性和改进,下面是对其进行的解读:1. 局部变量类型推断:Java 10 引入了 var 关键字,可以在局部变量的声明中使用。var 关键
2023-09-13

新特性解读 | MySQL 8.0 新特性-副本集(replicaset)

引言之前,我介绍过一篇《MySQL Innodb Cluster 扫盲篇》。MySQL Innodb Cluster = MySQL Shell + MySQL Router + MySQL Group Replication(MGR)全程由 MySQL Sh
新特性解读 | MySQL 8.0 新特性-副本集(replicaset)
2021-10-20

解读MySQL红黑树在索引压缩中的压缩算法

MySQL红黑树在索引压缩中的压缩算法主要基于红黑树的特性以及一系列优化技巧来实现。红黑树是一种自平衡的二叉搜索树,它能够在数据的插入和删除过程中保持树的平衡状态,从而确保查询的高效性。在MySQL索引中,红黑树被广泛应用于实现高效的查找、
解读MySQL红黑树在索引压缩中的压缩算法
2024-10-08

使用Python读写及压缩和解压缩文件的示例

读写文件 首先看一个例子:f = open('thefile.txt','w') #以写方式打开, try:f.write('wokao') finally:f.close()文件的打开方式:f = open(‘文件','mode') ‘
2022-06-04

新特性解读 | MySQL 8.0 之原子 DDL

作者:杨奇龙网名“北在南方”,8 年 DBA 老兵,目前任职于杭州有赞科技 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。本文来源:转载自公众号-yangyidba*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系
新特性解读 | MySQL 8.0 之原子 DDL
2014-05-18

新特性解读 | MySQL 8.0.19 支持 DNS SRV

MySQL Router 是 InnoDB Cluster 架构的访问入口,在架构部署上,官方给出的建议是 router 与应用端绑定部署,避免 router 单点问题。之前还有客户咨询,能否 router 不与应用端绑定部署,不便于部署,在此之前都需要在 r
新特性解读 | MySQL 8.0.19 支持 DNS SRV
2019-02-10

numpy版本更新解读:新特性与改进的性能

随着数据科学和深度学习的不断发展,Python作为主流的编程语言之一,其科学计算库numpy也在不断推陈出新。最近,numpy发布了新的版本,其中包含了一些新特性和性能改进。在这篇文章中,我们将深入探讨numpy的新版本,介绍其中一些重要的
numpy版本更新解读:新特性与改进的性能
2024-01-19

新特性解读 | 8.0 新增 DML 语句(TABLE & VALUES)

作者:杨涛涛资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、My
新特性解读 | 8.0 新增 DML 语句(TABLE & VALUES)
2015-03-09

JDK 新特性篇:JDK 9 新特性详解

JDK 9 是 Java 平台的一次重大更新,引入了许多新的特性和改进。以下是 JDK 9 的一些主要新特性的详细解释。模块化系统(Module System):JDK 9 引入了一个全新的模块化系统,它允许将代码和资源以模块的形式组织和封
2023-09-13

JDK 新特性篇:JDK 10 新特性详解

JDK 10 是 Java 开发工具包的一个版本,其中包含了一些新的特性和改进。下面是 JDK 10 的一些新特性的详细解释:1. 局部变量类型推断:JDK 10 引入了局部变量类型推断的功能,使得在声明变量时可以使用 var 关键字代替具
2023-09-14

新特性解读 | InnoDB ReplicaSet:MySQL 副本集初体验

一、InnoDB ReplicaSet 介绍MySQL 副本集(官方名称:MySQL InnoDB ReplicaSet)在 MySQL 8.0.19 版本(2020-01-13 Released)之后开始支持,本质还是是基于 GTID 的异步复制角色分为 P
新特性解读 | InnoDB ReplicaSet:MySQL 副本集初体验
2020-04-27

新特性解读 | 趋近完美的 Undo 空间

作者:杨涛涛资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、My
新特性解读 | 趋近完美的 Undo 空间
2019-07-11

关于Java8新特性Optional类的详细解读

Optional类是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常,需要的朋友可以参考下
2023-05-19

编程热搜

目录