MYSQL binlog compression 来自MYSQL 8.020的声音

MySQL 8.0.20 引入了二进制日志(BINLOG)事务压缩功能,旨在降低磁盘占用和写入量。通过使用zstd算法进行压缩,不仅减少了存储空间,还节省了网络带宽。binlog_transaction_compression_level_zstd参数允许调整压缩级别,以平衡压缩效果和CPU使用。这一改进对于需要高效复制和备份的大型数据库系统尤其重要,并且在性能监控中也能观察到明显的空间节省。然而,由于与5.x版本的工具兼容性问题及系统升级难度,MySQL 8的采纳率在企业中仍不高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MYSQL 的新版本一直不断的发,其实这样有一个问题,到底我们要选择哪个版本的8 ,不断的升级导致“贪心不足” 的人们,总是在等待一个更好的版本,而还在继续使用5.X ,另外一个原因是MYSQL 5.x 一堆的工具,如果换到8 ,则不少的作废了。所以 MYSQL 8 使用的 cyber or  internet 的公司不多。当然另外一个原因是,一个系统上线后,想要升级数据库系统,那也是不容易的事情,

每个数据库都会面对一个重要解决的问题,磁盘的性能,其实数据库不少的优化和想法以及设计都是针对 磁盘的I/0,  cache buffer 预读, 其实数据库的技术和原理部分都是基于硬件的原理,而硬件的变化也会影响数据库的发展。

那么mysql 8.020 对于MYSQL的BINLOG 一个消耗磁盘的性能的killer, 做出了改变,原理就是压缩。

这个改变在MYSQL 的8.020这个版本,降低磁盘的占用和写入的量对数据库是一个永恒的话题。 

下面的话题就的从这几个参数来了。

默认binlog 的 binlog_transaction_compression 是关闭的, 这两个参数属于全局参数,是无法在系统运行中事务通过session级别来进行设置的。

但可以在session 中进行设置

压缩并不是对类似gtid 信息, 非事务的基于行的信息进行压缩.

压缩的方法是通过zstd逻辑的方式进行,将日志进行压缩,通过压缩事务将日志通过流的方式传送给复制端,或者组复制的成员或者mysqlbinlog 这样的程序等等.在这个过程中并不会对信息进行解压缩,二进制日志事务压缩因此既节省了事务发起者的存储空间,也节省了事务接收者(及其备份)的存储空间,还节省了事务在服务器实例之间发送时的网络带宽。

当对其中的事务的时间进行重放的时候,会将这些信息解压缩,或者在使用mysqlbinlog ,show binlog events  show relaylog events 等命令的时候会对他们进行解压.

binlog_transaction_compression_level_zstd系统变量,用于设置用于压缩的zstd算法的级别。值对于压缩工作量进行控制,从1到22,随着压缩级别的增加,压缩比也会增加,来减少事务有效负载需要的存储空间以及网络带宽。

select * from performance_schema.binary_log_transaction_compression_stats\G

在打开相关功能后, 并且在打开事务后有相关的事务运行后binary_log_transaction_compression 才有相关的信息.

另外在performance_schema 中对于相关的压缩的也有相关的监控

performance-schema-instrument = "stage/sql/%Compressing transaction changes.=ON"

performance-schema-consumer-events-stages-current = ON

上图是一个对binlog 进行压缩和不进行压缩,以及通过最终压缩的方式相关对比,可以看到通过这个功能进行压缩与原有的不压缩对于存储的尺寸有较大的不同.

从压缩的比率来看,通过MYSQL进行BINLOG 压缩.要比通过外部的压缩方法,损耗的CPU 等要低的多.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值