腾讯云数据库团队:谈如何深度优化MySQL内核
因此,如何利用好MYSQL就变得非常重要。一方面,需要通过MYSQL优化找出系统读写的瓶颈,提高数据库性能。另一方面,要合理涉及数据结构,调整参数,提高用户的操作响应;同时也尽可能的节省系统资源,使系统能够以更大的负载提供服务。本文将介绍腾讯云团队如何在内核层面优化Mysql。
早期的CDB主要基于开源的Oracle MySQL分支,专注于优化运维的OSS系统。在腾讯云,由于用户越来越多,CDB对MySQL的要求也越来越高。腾讯云CDB团队根据用户需求和行业发展的技术趋势,为MySQL分支深度定制和优化了CDB。优化集中在三个维度:内核性能、内核功能和外围OSS系统。具体方法如下:
1.内核性能优化
由于腾讯云上的DB基本需要跨校区容灾的特性,所以CDB针对MySQL的优化主要是在跨校区网络拓扑中部署主从DB的前提下,解决真实部署环境中的性能问题。经过分析和调查,我们将优化思想总结为“消除冗余I/O,缩短I/O路径,避免锁竞争”。以下是内核性能的一些示例:
1.主数据库和备用数据库之间的复制优化
问题分析
如上图所示,在native MySQL的复制架构中,主端通过Dump线程不断向从I/O线程发送Binlog事件,从I/O线程在接收到Binlog事件后主要有两个动作:
写入中继日志,这个进程会和从SQL线程竞争锁来保护中继日志。
更新复制元数据(包括主服务器的位置等信息)。
优化方法
经过分析,我们的优化策略是:
从属I/O线程和从属SQL线程是典型的生产者-消费者模型,可以设计成没有锁。所以实现思路是从I/O线程在每次数据写入后原子性地更新中继日志的长度信息,从SQL线程在读取中继日志时以长度信息为边界。这样,原本竞争激烈的接力日志锁就化解成了无锁;
因为Binlog事件中的GTID(全局事务标识符)和DB事务是一一对应的,中继日志中的数据本身已经包含了需要的复制元数据,所以我们不用写Master info文件,消除了冗余的文件I/O;
在DB中,更新粒度是事务,因为在中继日志文件的I/O上,我们通过将小的离散I/O合并成具有事务粒度的大I/O,大大提高了磁盘I/O。
优化效果
如上图所示,优化后:左图中35.79%的futex已经完全淘汰;在相同的压力测量下,56.15%的文件I/O开销优化为19.16%,从I/O线程优化为预期的I/O密集型线程。
2.主库事务线程和转储线程之间的优化
问题分析
如上图所示,在native MySQL中,多个事务提交线程TrxN和多个Dump线程会同时争夺Binlog文件资源的保护锁,多个事务提交线程会写入Binlog,多个Dump线程会从Binlog文件中读取数据并发送给Slave。所有线程都是串行执行的!
优化方法
经过分析,我们的优化策略是:
读写分离,多个写线程仍然在锁的保护下串行执行。每个写线程写完之后,更新当前Binlog的长度信息,多个转储线程以Binlog文件的长度信息为读取边界,多个转储线程并行执行。用这种方法让复制拓扑中的转储线程发送得更快!
影响
优化后的原理图如下:
经过测试,优化后的内核不仅提高了事务提交线程的性能,而且在转储线程较多的情况下,大大提高了主从复制的性能。
2.主图书馆和备用图书馆之间互动过程的优化
问题分析
如上图所示,在native MySQL中,主备库之间的数据传输和ACK响应是简单的串行执行,不允许继续发送下一个事件,直到前一个事件的ACK响应到达;这种行为在跨校区(RTT 2-3ms)的情况下很差,不能很好的利用带宽优势。
优化方法
经过分析,我们的优化策略是:
ACK响应的发送和接收被分离到不同的线程中,因为发送和接收都是基于TCP流传输,所以定时有保证;这样,发送线程可以在收到ACK前继续发送,接收线程在收到ACK后唤醒等待线程执行相应的任务。
影响
根据实际用例测试,优化后的TPS提高了约15%。
三。核函数优化
1.运维账户连接号预留额度。
在腾讯云上,用户不时会遇到APP异常或bug,从而占用DB的最大连接限制。这是因为CDB OSS账户无法登录进行紧急操作和维护。针对这种情况,我们在MySQL内核中设置了可配置的连接配额。即使在上述场景下,运维账号仍然可以连接DB进行紧急运维。它大大降低了异常情况下DB中无政府状态的风险。这个账号只有数据库运维管理权限,无法获取用户数据,也保证了用户数据的安全。
2.主设备和备用设备之间的强同步
针对某些应用对数据的高一致性要求,CDB在MySQL原生半同步的基础上进行了深度优化,确保一个事务在提交到主数据库之前,必须已经复制到至少一个备用数据库。当主库关闭时,确保数据一致性。
四。外围系统优化
除了上面提到的MySQL内核的部分优化,我们还在外围OSS平台上做了几项优化。比如使用异步MySQL ping协议监控大量实例,使用分布式技术加强原系统的HA/服务发现和自动扩容功能,在数据安全/故障转移和快速恢复方面也做了很多优化。
相关建议
腾讯云数据库CDB for MySQL产品相关文档
MySQL数据库设计综述
本文由作者授权的腾讯云技术社区发布。转载请注明出处,获取更多云计算技术干货。请到腾讯云技术社区。
微信微信官方账号:QcloudCommunity
腾讯云数据库团队:谈如何深度优化MySQL内核
标签:更新环境,网络传输信息,安全文件技术分享。