MySQL源码改造之并行复制改进-任赟婷.pdf
《MySQL源码改造之并行复制改进-任赟婷.pdf》由会员分享,可在线阅读,更多相关《MySQL源码改造之并行复制改进-任赟婷.pdf(27页珍藏版)》请在三一文库上搜索。
1、MySQL源码改造之并行复制改进源码改造之并行复制改进 MySQL源码优化的探寻之路 任赟婷任赟婷 携程旅行网携程旅行网 背景 MySQL主从复制的单线程工作机制,常常是制约复制性能 的最大瓶颈。 MySQL 5.6开始支持Per-DB的多线程并行复制,但在单库 复制压力场景下仍然无能为力。 困境 首先遭遇到复制瓶颈的是zabbix后台数据库。 监控数据越来越多,slave早在master到达负载上限之前成为了 性能瓶颈。 复制频繁出现延迟问题,当slave有查询压力更加明显。 新增slave节点的耗时也越来越长,整个部署周期超过5天。 需求 为了缓解复制压力,我们根据监控对象的不同拆分了多
2、组 zabbix系统。但是,复制的性能上限仍然严格限制了每组 zabbix系统能承担的容量上限。 能不能有一种拆分粒度更细化的并行复制,来提高slave上 的写入速度? 探索 在寻求解决方案的道路上,首先考虑尽可能使用已有的成 熟方案。于是在我们面前有两个选择: 1. MySQL主从同步加速transfer (by taobao) 2. MariaDB 10(引入了新的并行复制功能) 探索(续) 关于Transfer: 1. 暂没有对应官方5.6.12版本的patch。 2. 最新的发布形式是可执行的mysqld文件。 3. 要求主库的binlog格式必须是row(我们的标准配置是 mixed
3、,row模式的replace语句可能出现自增长问题) create table test ( a int(11) default null, id int(11) not null auto_increment, b int(11) default null, primary key (id), unique key d (d) ); insert into test values(5,27,4); replace into test(a,id,b) values(6,35,4); commit; show create table时: 主库:auto_increment=36 备库:auto
4、_increment=28 探索(续) 关于MariaDB 10: 从长远来说这是最佳解决方案,通用且能保证从机事务一 致性完全忠实于主机(by google)。 问题在于,首个GA版刚发布不久,在正式引入线上环境之 前,还有更多事情要做。 方向 既然没有马上能用的现成方案,何不尝试下自己造? 于是,我们决定以并行复制的需求为契机,作为我们进行 MySQL自定制改造的起点,逐步踏入MySQL源码研究和优 化的领域。 起步 基于MySQL 5.6的多线程复制实现,依赖原生参数 slave_parallel_workers设置复制的工作线程数。 先进行最基本的尝试,调整MySQL的复制SQL进程,
5、改造 Log_event类get_slave_worker事件处理线程的获取方式。 获取后将事件拆分,在多个slave工作线程中,轮流选择, 执行事件。 1、在函数Log_event:get_slave_worker中建立将分配worker的工作交给新的分配函数 2、构造自己的分配函数 复制分发事件 Worker 事件 Worker 事件 Worker 事件 Worker 执行 复制分发事件 Worker DB事件 Worker 执行 原复制分发处理方式 改进后的复制分发处理方式 问题1 必然问题:由于操作并行后顺序被打乱,引起数据一致性 校验问题,例如外键约束等。 解决思路:针对类似zabb
6、ix的应用,具有两个明显特点 1. 大量写入集中在几个特定的表; 2. 这些表的写入对顺序并不敏感。 解决1 增加参数变量slave-parallel-simple-tables用来配置需要进行 事件拆分的表名。同时增加了变量slave-parallel-simple用 来动态开关自定义的表级别并行复制。 进一步改造get_slave_worker事件处理线程,针对指定表的 DML事件进行拆分,并在多个slave工作线程中,轮流选择 执行。不符合拆分规则的,仍然保持串行处理。 复制分发事件 Worker 事件 Worker 事件 Worker 事件 Worker 执行 改进后的复制分发处理方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 源码 改造 并行 复制 改进 任赟婷
链接地址:https://www.31doc.com/p-3330766.html