DTCC2017〡腾讯云CDB的核弹头:TXSQL的研发、实践和未来
扫一扫
分享文章到微信
扫一扫
关注99科技网微信公众号
5月11日,国内数据库技术盛会——2017第八届中国数据库技术大会(DTCC2017)拉开帷幕。本届大会以“数据驱动 价值发现”为主题,吸引5000多名IT数据库人群、大数据从业人员、广大互联网人士。腾讯高级工程师、腾讯云布道师张青林进行了题为《腾讯云CDB的核弹头——TXSQL》主题演讲。
在本次主题演讲中,张青林主要从概览、内核研发、云上实践、未来发展方向四个方面介绍了Tencent MySQL(TXSQL)在腾讯云发展过程中遇到的各种问题,以及在解决这些问题的过程中TXSQL内核所做的一系列优化,包括read_view优化、Lock_log拆分、分布式token锁、Redo log锁拆分、Binlog限速等功能,从功能、性能和稳定性上对TXSQL进行深入的解析。
TXSQL内核版本拥有更高的性能、更强的稳定性,同时提供Oracle MySQL企业级版本才拥有的特性,对内支持集团内部业务的发展,对外提供强有力的竟争力,大大提升了腾讯云在业界的影响力,赢得了客户的信任与口碑,积极的推动了腾讯云的快速发展。
TXSQL概览
什么是TXSQL?为什么有TXSQL?
TXSQL是Tencent MySQL的简称,是TEG基础架构部CDB(Cloud DataBase)团队在近十年发展过程中衍生出来的一个对MySQL内核源码深度定制、对官方MySQL版本进行二次开发的项目。其主要目的是在保证线上稳定性的同时,满足业务对数据库的各种需求。
TXSQL的服务对象是公司内部用户和腾讯云上小至数G大至数百T的外部客户。TXSQL是支撑这些业务平稳运行的关键基石,促进开源数据库技术发展。
图1
TXSQL内核研发
TXSQL read view优化
read view又称读视图,用于存储事务创建时的活跃事务集合。当事务创建时,线程会对trx_sys上全局锁,然后遍历当前活跃事务列表,将当前活跃事务的ID存储在数组中的同时,记录最大事务low_limit_id&最小事务 high_limit_id&最小序列化事务low_limit_no。
当事务执行时,凡是大于low_limit_id的数据对于事务是不可见的,凡是事务小于high_limit_id的数据都是可见的,事务ID是read_view数组中的某一个时也是不可见的;Purge thread在执行Purge操作时,凡是小于low_limit_no的数据,都是可以被Purge的,read view是MySQL MVCC实现的基础。
Redo log优化背景
据介绍,MySQL有两种很重要的Log,分别为redo log&binlog,前者是保证事务原子性操作所产生的日志,后者是主备数据同步所产生的同步日志。其中binlog在ordered_commit时进行group commit,而redo log则是在事务提交的时候分别调用trx_prepare使redo log落地,导致log_sys->mutex竟争较为严重。
从crash recovery的逻辑来看,只要redo log早于binlog落地,就不会有数据问题,因此在ordered_commit的第一阶段时,TXSQL会收集各种引擎的最大redo log LSN,然后将小于该LSN的redo log落盘,从而提升写性能。更详细的分析与测试,可以参考bug#73202。
图2
TXSQL redo log双缓冲区
投稿邮箱:jiujiukejiwang@163.com 详情访问99科技网:http://www.fun99.cn