前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >What's up MYSQL 8 在性能设计上的改变(redo log)

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

作者头像
AustinDatabases
发布2019-07-17 11:03:57
5030
发布2019-07-17 11:03:57
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

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 号。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档