腾讯云数据库MySQL 8.0——腾讯云内核 TXSQL

2020/8/26 22:08:00

1. TXSQL是什么




为什么腾讯云 MySQL 8.0 性能可以超越 Oracle 原生版本?这是因为腾讯云有专门做内核的数据库团队,相当于腾讯云内部有一个能够去做 MySQL 源码分支技术研发的专家团队。

我们的内核叫做 TXSQL,项目团队在十几年前就已成立。团队的工作是在原生内核源码深度下做项目定制,对官方版本进行二次开发。除了支撑腾讯云数据库 MySQL 的平稳运行,也以打造国产数据库 MySQL 分支为已任。

当然,我们目前跟其他耳熟能详的 MySQL 分支(比如:Percona和MariaDB)比起来,仍然处于一个相对的稚嫩阶段,但是内核体系业已搭建发展起来,腾讯也会不断致力于发展国产数据库。

2. TXSQL演进之路



如上图所示,腾讯云 MySQL 的内核在每一个版本都做了很多改进,不断修理官方Bug,加强性能以及做企业级功能的适配。

我们从官方 5.1 版本的时候就在不断跟进,会选择一个经典稳定版本做为基础版本进行开发。所以我们是一个在内核层面能够自主可控的厂商,因为内核都是我们自己写的。

但我们现在还是发展过程中,当到了某个阶段,我们也会把TXSQL开源出来提供给大家,到时即便不是腾讯云数据库用户也可以用上TXSQL,也可以用上国产数据库内核级别的软件,这将是一个非常有意义的事情。

3. 历史发布的优秀特征


在8.0的版本之前,TXSQL也发布过一些优秀的特性:

(1)异步大表删除

在日常运维过程中,当删除一个大表时(如一个 20 G 的 ibd 文件的大表),在删除这个大文件的过程中,文件系统 IO 达到峰值,持续好几秒,这样会导致文件系统无法响应其他数据库实例的 IO 请求,对上层应用表现为数据库无法响应。

在有些业务中,如果有好几秒数据库没有响应,就是很严重的事故。为了让删除大文件的 IO 更平滑,运维人员总结出一系列的操作,以降低系统级不可用的风险。但这这些做法缺少统一的模式,以及操作上的不确定性。

TXSQL 在内核实现了异步删除表的功能,通过自动化的方式,减少人为操作中可能犯的错误。其通过分离数据文件,将原有的数据文件脱离 MySQL 系统,并建立后台任务,将文件的删除转化为文件的逐步回收,当数据文件进入低风险大小后,完成最后的删除动作。

这种分散的操作,极大的分摊的系统开销,提供系统的可用度。对于用户来说,可以通过简单的开关模式,动态开启或者关闭该功能,就可以使用 TXSQL 提供的该项功能,极大的避免起停服务,导致对业务的影响。

(2)GTID 复制功能扩展


GTID 模式下复制支持 create as select,create/drop temporary table, 同时能更新事务表和非事务表等语句。适用场景如下:

  • CTAS 操作频繁场景,无法优化 CTAS 为先建空表,再 Insert 的业务场景;

  • 大量使用临时表场景;

  • 更新 MyISAM 表场景 无法使用 GTID 问题;

  • 内核层级新增参数来控制开关。


(3)复制限速


在 MySQL 的主从之间,一般原生的是通过获取 node 来访问主从复制,但这样就会带来一个问题。就是在主从之间(也就是 master 和 Slave之间)新建了一个实例,如果中断时间比较长,而你的网络刚开始恢复的时候,它会瞬间把你主从之间的带宽给打满,这可能会影响到其他一些正常的业务逻辑。

为了避免类似这样的问题,TXSQL 提供了一个限速插件。这个插件在主从同步的时候,可以设置阈值。因此即便在这种情况下,也可以保证为业务应用预留一定的带宽。

在实现上,TXSQL 采用对线上业务影响最小的 Slave 端限速的方案。该方案下,只需原地升级 Slave,不会影响线上服务,在确保不停服务的前提下,这个方案更容易被业务方接受。

实际的限流算法采用了经典的流量管控算法—令牌桶的模式,该算法更适于流量不稳定的网络模式,让流量更平滑,这种不稳定的处理方式对于 TXSQL 所面临的复杂应用场景有更好的应用,避免了前面所描述的可能的突发流量导致服务器的可用性降低。


(4)Redo log 双缓冲区


MySQL redo log 是一个顺序写的单缓冲区,log_sys->mutex 锁资源竞争激烈,在事务落盘的过程中对 LSN 相关的读、写都被堵塞,为了解决 log_sys->mutex的锁 竞争问题,引入双缓存机制 &w_mutex 锁,在 flush redo log 的过程中释放 log_sys->mutex,继续持有 log_sys->w_mutex,从而堵塞写,不堵塞 LSN 相关的读操作,flush 完成后释放 w_mutex;从而提升并发性,提升性能。

4. 腾讯云MySQL设计理念


腾讯云的MySQL数据库底座因为有内核团队做支撑,并且在上层有非常强健完善的管控系统,可以做 HA、储备切换、备份、迁移存储、迁移升级等等的操作,这些一起组成了腾讯云数据库的 MySQL 服务。

腾讯云数据库的MySQL设计理念总结下来,就是数据强一致,满足客户的高性能需求,在安全性方面也必须得到保障。还有就是云上数据库的重要特性:具有良好扩展性,可以快速进行扩容、增加实例,进行纵向和横向的扩展以及便捷的运维。

另外,腾讯云 MySQL 周边也有很大的工具体系,比如和 DTS 数据迁移、智能管家 DBbrain 结合在一起,形成了一整套腾讯云数据库服务。

腾讯云数据库的架构默认是一主一备,但也支持一主两备三节点金融版的架构。在这个基础上,我们还可以进行扩展只读实例(下图左),方便用户读写分离,也可以扩展灾备实例(下图右),实现异地灾备,异地多中心的架构,形成完整健全的HA的切换,保证用户在HA切换的同时地址不变更,数据也不会丢失。