QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

腾讯云 MySQL 内核优化深度分享

  • 2016-06-16
  • 本文字数:2121 字

    阅读完需:约 7 分钟

作者简介:

简怀兵,讯云数据库高级工程师,负责腾讯云 CDB 内核及基础设施建设,先后供职于 Thomson Reuters 和 YY 等公司,PTimeDB 作者,曾获一项发明专利,从事 mysql 内核开发工作 8 年,具有丰富的优化经验;在分布式存储等领域有较丰富经验;

早期的 CDB 主要基于开源的 Oracle MySQL 分支,侧重于优化运维和运营的 OSS 系统。在腾讯云,因为用户数的不断增加,对 CDB for MySQL 提出越来越高的要求,腾讯云 CDB 团队针对用户的需求和业界发展的技术趋势,对 CDB for MySQL 分支进行深度的定制优化。优化重点围绕内核性能、内核功能和外围 OSS 系统三个维度展开,具体的做法如下:

内核性能的优化

由于腾讯云上的 DB 基本都需要跨园区灾备的特性,因此 CDB for MySQL 的优化主要针对主从 DB 部署在跨园区网络拓扑的前提下,重点去解决真实部署环境下的性能难题。经过分析和调研,我们将优化的思路归纳为:“消除冗余 I/O、缩短 I/O 路径和避免大锁竞争”。以下是内核性能的部分案例:

1、主备 DB 间的复制优化

问题分析

如上图所示,在原生 MySQL 的复制架构中,Master 侧通过 Dump 线程不断发送 Binlog 事件给 Slave 的 I/O 线程,Slave 的 I/O 线程在接受到 Binlog 事件后,有两个主要的动作:

  • 写入到 Relay Log 中,这个过程会和 Slave SQL 线程争抢保护 Relay Log 的锁。
  • 更新复制元数据 (包含 Master 的位置等信息)。

优化方法

经过分析,我们的优化策略是:

  • Slave I/O 线程和 Slave SQL 线程是典型的单写单读生产者 - 消费者模型,是可以做到无锁设计的;因此实现思路就是 Slave I/O 线程在每次写完数据后,原子更新 Relay Log 的长度信息,Slave SQL 线程读取 Relay Log 的时以长度信息为边界。这样就将原本竞争激烈的 Relay Log 锁化解为无锁;
  • 由于 Binlog 事件中的 GTID(Global Transaction Identifier) 和 DB 事务是一一对应的关系,所以 Relay Log 中的数据本身已经包含了所需要的复制元数据,所以我们可以不写 Master info 文件,消除了冗余的文件 I/O;
  • 由于 DB 都是以事务为更新粒度的,因为在 Relay Log 文件 I/O 上,我们通过合并离散小 I/O 为事务粒度的大 I/O 等手段,使得磁盘 I/O 得以大幅提升。

优化效果

如上图所示,经过优化:左图 35.79% 的锁竞争 (futex) 已经被完全消除;同压测压力下,56.15% 的文件 I/O 开销被优化到 19.16%,Slave I/O 线程被优化为预期的 I/O 密集型线程。

2. 主库事务线程和 Dump 线程间的优化

问题分析

如上图所示,在原生 MySQL 中多个事务提交线程 TrxN 和多个 Dump 线程之间会同时竞争 Binlog 文件资源的保护锁,多个事务提交线程对 Binlog 执行写入,多个 Dump 线程从 Binlog 文件读取数据并发送给 Slave。所有的线程之间是串行执行的!

优化方法

经过分析,我们的优化策略是:

将读写分离开来,多个写入的线程还是在锁保护下串行执行,每一个写入线程写入完成后更新当前 Binlog 的长度信息,多个 Dump 线程以 Binlog 文件的长度信息为读取边界,多个 Dump 线程之间并行执行。以这种方式来让复制拓扑中的 Dump 线程发送得更快!

优化效果

优化后的示意图如下:

经过测试,优化后的内核,不仅提升了事务提交线程的性能,在 Dump 线程较多的情况下,对主从复制性能有较大提升。

主备库交互流程优化

问题分析

如上图所示,在原生 MySQL 中主备库之间的数据发送和 ACK 回应是简单的串行执行,在上一个事件 ACK 回应到达之前,不允许继续发送下一个事件;这个行为在跨园区 (RTT 2-3ms) 的情况性能非常差,而且也不能很好地利用带宽优势。

优化方法

经过分析,我们的优化策略是:

将发送和 ACK 回应的接收独立到不同的线程中,由于发送和接收都是基于 TCP 流的传输,所以时序性是有保障的;这样发送线程可以在未收 ACK 之前继续发送,接受线程收到 ACK 后唤醒等待的线程执行相应的任务。

优化效果

根据实际用例测试,优化后的 TPS 提升为 15% 左右。

内核功能的优化

预留运维帐号连接数配额

在腾讯云上,不时遇到用户 APP 异常或者 BUG 从而占满 DB 的最大连接限制,这是 CDB OSS 帐号无法登录以进行紧急的运维操作。针对这个现状,我们在 MySQL 内核单独开辟了一个可配置的连接数配额,即便在上述场景下,运维帐号仍然可以连接到 DB 进行紧急的运维操作。极大地降低了异常情况下 DB 无政府状态的风险。该帐号仅有数据库运维管理权限,无法获取用户数据,也保证了用户数据的安全性。

主备强同步

针对一些应用对数据的一致性要求非常高,CDB 在 MySQL 原生半同步的基础上进行了深度优化,确保一个事务在主库上提交之前一定已经复制到至少一个备库上。确保主库宕机时数据的一致性。

外围系统的优化

除了以上提到的 MySQL 内核侧的部分优化,我们也在外围 OSS 平台进行了多处优化。例如使用异步 MySQL ping 协议实现大量实例的监控、通过分布式技术来加固原有系统的 HA/ 服务发现和自动扩容等功能、在数据安全 / 故障切换和快速恢复方面也进行了多处优化。

2016 年 7 月 5 日,诚邀您参与腾讯·“云 + 未来”生态峰会,与腾讯董事会主席马化腾先生及各界顶级企业家,国际专家一同,共探产业与互联网融合发展之道,推动互联网 + 生态圈发展。欢迎点击了解 http://www.qcloud.com/event/tcc2016?utm_source=infoqlink&utm_medium=wzl&utm_campaign=infoQ

2016-06-16 05:071578
用户头像

发布了 24 篇内容, 共 16.9 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

关于写东西的一点思考

道伟

28天写作

Wireshark数据包分析学习笔记Day7

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

甚至你可以在网抑云上听歌

ES_her0

28天写作 3月日更

【20万大奖】参加APICloud3.0案例与AVM组件大赛,赢现金大奖

YonBuilder低代码开发平台

开发者 大前端 APP开发 APICloud

如何带团队?

石云升

程序员 28天写作 职场经验 管理经验 3月日更

终于有人把 "高可用" 说清楚了

架构精进之路

3月日更

项目截图

赝品

Python 变量类型

依旧廖凯

28天写作 3月日更

价值感知:如何评价企业IT项目的价值?

boshi

价值传递 七日更 项目经验

为什么选择python

张鹤羽

28天写作 3月日更

ARTS - Week 6

Khirye

Java LeetCode arts

一名优秀的女程序员是如何炼成的?我们跟爱奇艺的五位工程师姐姐聊了聊

爱奇艺技术产品团队

2021最新快手面经主动分享:Java面试神技/技术知识集合(10个专题详细介绍)

比伯

Java 编程 架构 面试 程序人生

算法攻关-从上到下打印二叉树(O(n))_offer32

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 算法攻关

软考备考视频的目录

IT蜗壳-Tango

3月日更 软考

MySQL原理

Sakura

28天写作 3月日更

还不懂云数据库Redis是什么?快上车,一张图带你了解!

云数据库

深读golang中map后思考和借鉴

ninetyhe

源码 Go 语言

翻译:《实用的Python编程》04_04_Defining_exceptions

codists

Python

FutureTask源码解析

程序员星星toC

多线程 Future future设计模式

Elasticsearch Reindex & Index Alias

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

【笔记】第七周 第1课

Geek_娴子

引爆40亿播放的抖音春节道具,背后是怎样的技术?

字节跳动技术团队

JAVA中的I/O模型-多路复用

Java 架构 计算机

Hello World!!!

SBB

已经整整10年了,经济学人分析日本福岛核泄漏事故带来的沉重影响

wbliu85

LeetCode题解:125. 验证回文串,双指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

华为不养猪,小米没造车,“巨头错觉”是怎么来的?

脑极体

Python 基础语法

依旧廖凯

28天写作 3月日更

数字货币持币生息钱包系统开发搭建

薇電13242772558

区块链 数字货币

HashData携手中国移动 共筑通信技术数字化之路

酷克数据HashData

数据库 解决方案

腾讯云MySQL内核优化深度分享_数据库_云加社区_InfoQ精选文章