MySQL 5.7增强版增强版Semisync Replication性能优化性能优化
主要介绍了MySQL 5.7增强版Semisync Replication性能优化,本文着重讲解支持发送binlog和接受ack的异步
化、支持在事务commit前等待ACK两项内容,需要的朋友可以参考下
一一 前言前言
前文 介绍了5.5/5.6 版本的MySQL semi sync 基础原理和配置,随着MySQL 5.7 的发布,新版本的MySQL修复了semi sync
的一些bug 并且增强了功能。
支持发送binlog和接受ack的异步化;
支持在事务commit前等待ACK;
在server层判断备库是否要求半同步以减少Plugin锁冲突;
解除binlog dump线程和lock_log的冲突等等。
本文重点分析 第1,2个改进项,因为原来的模式的确会影响系统的tps,新的异步模式可以提高半同步模式下的系统事务处理能
力。
二二 优化优化
1、支持发送、支持发送binlog和接受和接受ack的异步化的异步化
通过前面的介绍,我们知道Semisynchronous Replication模式下,app在主库上提交一个事务/event,MySQL将每个事务写入
binary并且同步到到slave ,master会等待至少一个slave通知:slave 已经接收到传过来的events并写入relay log,才返回给回
话层 写入成功,或者直到传送日志发生超时,系统自动将为异步复制模式。
整体流程的逻辑图
5.5 版本版本semi sync 设计的缺点:设计的缺点:
从原理以及上图来看,旧版本的semi sync 受限于dump thread ,原因是dump thread 承担了两份不同且又十分频繁的任
务:传送binlog 给slave ,还需要等待slave反馈信息,而且这两个任务是串行的,dump thread 必须等待 slave 返回之后才会
传送下一个 events 事务。dump thread 已然成为整个半同步提高性能的瓶颈在高并发业务场景下,这样的机制会影响数据库
整体的TPS .
为了解决上述问题,在5.7.4版本的semi sync 框架中,独立出一个 ack collector thread ,专门用于接收slave 的反馈信息。这
样master 上有两个进程独立工作,可以同时发送binlog 到slave ,和接收slave的反馈。整体流程的逻辑图
评论0
最新资源