欢迎来到天天文库
浏览记录
ID:37342405
大小:1.51 MB
页数:38页
时间:2019-05-22
《携程MySQL源码改造介绍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、携程MySQL源码改造介绍关于我•编写代码17年•携程MySQL源码研究近3年•数据库研究与开发12年多版本历程•5.6.12•2012年引入,第一个MySQL版本•5.6.21•2014-2017,绝大部分的源码功能添加与探索集中在该版本上•5.7.17•正在上线中的版本5.6.12的工作•异步复制•针对携程监控场景的自定义改造•flashback功能的移植•移植自阿里数据库专家彭立勋所开发的代码异步复制•背景•Zabbix监控下,复制分发延迟情况比较严重•特点•部分表的update/insert的操作集中,且SQL相关性不强•改造目
2、标•提高slave的写入效率•改造手段•在slave针对特定表的DMLSQL进行事务拆分,由单线程转为多线程SQL运行改造原理异步复制对比测试初试啼声5.6.21•移植工作•flashback功能•新增修改•审计插件•Slowlog功能增强•Showprocesslist功能增强•探索性功能•时间序列存储引擎审计插件•目的•线上操作监控•功能特性•用户级审计设定•语句级/关键词审计设定•动态配置•Json格式输出•缓存提速原理图audit埋点audit接口audit插件连接类型通用类型错误类型审计文件审计代码•插件声明•接口定义•处理函
3、数Slowlog功能增强•DBA与用户的矛盾•slowlog记录执行时间,不包括上锁时间•用户关注命令发出到结果返回的时间•改进•增加对上锁时间的记录改进后计时Locktables计时发送命令计时语法分析接收消息执行执行SlowlogSlowlogSlowlog客户端原生新增Showprocesslist功能增强•与pstree等工具配合使用,更准确判断各个连接的状态时间序列存储引擎•出发点•利用MySQL已有的网络框架•利用MySQL已有的高可用架构•SQL语句降低开发者的学习曲线•SQL方式标准化时间序列存储引擎的操作方式时间序列存
4、储引擎-运维视图时间序列存储引擎-运行视图插入缓冲区插入队列行数据行数据表对象行数据插入缓冲区池行数据文件行数据表对象行数据插入缓冲区时间序列存储引擎-插入性能对比引擎线程1线程(ips)3线程(ips)6线程(ips)Cfl370057008400MyISAM330045006000InnoDB1900210030002核ssd虚拟机时间序列存储引擎-源码•MySQL文件:handler.h/handler.c•Cfl文件:•程序片段渐入佳境5.7.17•移植功能•5.6.21的线上功能•新功能•记录binlog中DML的发起者(i
5、nvoker)•mysqlfbtool,flashback结果转换为可执行的SQL语句的工具•保留连接的改造•performanceshcema功能改进•RPM打包开发binlog中的invoker•修改目的•记录是谁进行了DML操作•为后续的按用户操作回滚提供基础•效率问题•以事务为单元进行记录•写入量占比极低mysqlfbtool•将mysqlbinlog工具解析出的语句还原为SQLInvoker&Flashback&MysqlfbtoolMySQL服务器binlog文件flashback操作mysqlbinlogflashback
6、文件SQL生成mysqlfbtoolSQL文件保留连接的改造•MySQL达到最大连接数后,允许1个超级用户进行连接•增加配置项,预留更多的连接performanceshcema改进•目标•期望如SQLServer一样生成语句的generallog•效率问题•events_statements_history_long的数据针对每次查询都要重新生成•功能•在events_statements系列表中增加host&user的输出•运行中动态配置events_statements事件的记录写盘•避免开启events_statements_hi
7、story_long的读写效率问题•便于备份和使用performanceshcema的运行图pf埋点写入pf引擎pf存储记录CSV写入日志连接1查询连接2查询使用者生成结果集生成结果集客户端1客户端2RPM打包开发•问题•5.7.17无法按照5.6的操作进行打包•解决•仿照5.6.X的打包方式重新编写mysql.spec.sh•特色•增加了携程定制的打包内容,如mysqlfbtool以及名字等总结•版本•5.6.12/5.6.21/5.7.17•功能点•11个线上运行功能•1个探索性开发源码改造经验•太深的源码改造将影响版本升级。在享受
8、新版本和自定制中存在一个平衡。由此,总结下来一些原则减少版本升级中的问题•1、尽可能的利用MySQL原有的函数•2、尽可能通过插件来完成功能•3、如果不可避免要进行代码修改,则尽可能通过新增函数/源文件方式
此文档下载收益归作者所有