What's up MYSQL 8 在性能设计上的改变(redo log)

MySQL 8 在性能方面进行了突破性设计,尤其在REDOLOG(WAL)设计上进行了重大改进,增强了并发处理能力。通过改变刷新顺序和引入log_closer thread等机制,提高了效率并减少了脏页写入的顺序依赖。

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

MYSQL 8 的在性能上的设计在MYSQL 的历史上是具有突破性的,也是从底层的架构上进行的改变,可能未来MYSQL 越来越不像原来的MYSQL,长远看MYSQL 是朝着企业和互联网通吃的方向去的,其实MYSQL本身的设计和其他的数据库相比是有差距的,例如doublewrite对性能的损耗,以及在RR上的GAP 其实可能对有些其他数据库的使用者都是吐槽的对象。

而从MYSQL 8 上的新设计上来看,REDO LOG (WAL)的设计是进行改变了,这也是为什么会期盼MYSQL8 的声音很多的原因之一。

老的MYQL的设计在目前越来越多,越复杂的任务中,REDO LOG 的设计的确说不上有多出色。

而新的设计,突发的就是他的并发性,这其实在程序设计里面并不容易,到底以什么来决定并发性,在程序设计里面如果是串行的,解决的方法都比较简单,也不容易出错,而只要设计并发性这样的问题,则需要考虑的问题就很多,那个在前那个在后,无关联的是否可以同时进行,并行对目前的磁盘压力是否可以接受,等等,如何在并行中又保持一个顺序。(个人觉得和MTS 的部分有类似的想法)

多线程的操作中,单个线程有自己的内部锁保证刷新的顺序,但和之前的设计不同的地方是不再以LSN 号作为一个刷新的顺序。但需要考虑的是 checkpoint 和 flushing 总体的顺序,因为REDO LOG 最终的目的是在DATABASE CRASH 时进行回滚,回滚是一定要有顺序的。

下图就是一个(粗糙)的解释,上面是原先MYSQL的设计,下面是MYSQL8 的设计,如果从时间的角度来看,MYSQL8 的redo 刷新的设计是要节省时间的(如果长度代表时间的话)

而最终造成的效果就是 一整段的 dirty pages 写入不在是顺序性,(大括号的位置是未写入的数据)这里面会有一个 log_closer  thread 去扫描哪些是完成的段,并且更新哪些是已经完成的最大 LSN 号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值