5.7增强semisync复制MySQL性能优化

前言

介绍了5.5/5.6版本的MySQL半同步的基本原理和结构。随着MySQL 5.7的发布,新版本的MySQL修复了一些bug,增强了半同步功能。

它支持binlog和ACK接受异步传输;

在事务提交之前等待ACK的支持;

在服务器层,判断是否需要半同步来减少插件锁冲突。

消除冲突的binlog转储线程和lock_log等。

本文重点分析了1,2改进项,因为原有模式对系统的TPS有影响,新的异步模式可以提高系统在半同步模式下的事务容量。

两个优化

1。支持发送和接受性binlog ACK

通过介绍,我们知道,半同步复制模型,应用程序/事件提交事务的主要图书馆,MySQL将每个事务的二进制和同步的奴隶,主人会等待至少一个奴隶的奴隶已经收到通知:通过事件写的中继日志,然后返回写入成功层,或直到传输日志超时发生时,系统会自动为异步复制模式。

整个过程的逻辑图



5.5版半同步设计的缺点:

从上面的原理和观点,采用半同步的老版本是有限的转储线程转储线程负责不同的和非常频繁的任务:把binlog奴隶,奴隶还需要等待反馈,和这两个任务是串行的,转储线程必须等待只返回一个事件交易在转让后的奴隶。转储线程已经成为在高并发的业务场景的整体性能提高的瓶颈,而这样的机制会影响数据库的整体计划。

为了解决这个问题,在对5.7.4版半同步框架,应答器线程是独立制作,是专门用于接收从反馈信息。这样,有两个进程独立工作的主人,可以把binlog奴役的同时,接收从反馈的整个过程的逻辑图。



实现的一般思想是:

备份库的IO线程使用TCP协议与主库进行交互。套接字可以同时读取和写入。打开主图书馆semisync时,后台线程启动时,与插座连接的选择监测数据库。

转储线程不再等待ACK ACK图书馆;当接收线程等待ACK,转储线程也可以继续发送下一组组的binlog提交,然后提高TPS ..

2在事务提交之前等待ACK的支持;

半同步新版本增加了rpl_semi_sync_master_wait_point参数控制方式的主图书馆将回国之前提交交易成功交易。

这个参数有两个值:

after_sync(默认):大师写的每个事务binlog,通过奴隶,并刷新到磁盘。主人等待接收奴隶反馈交易和刷新到磁盘。一旦奴隶主接收反馈,提交事务的主要图书馆和返回结果的会议。在after_sync模式,所有客户的观点已经同时提交数据。如果主库发生崩溃时,所有的交易已经在主库提交已同步到奴隶和记录日志切换继电器,此时从图书馆可以保证最小的数据丢失。

after_commit:大师写的每个事务binlog,通过奴隶刷新到磁盘(中继日志),然后提交事务的主要图书馆。主人正在等待从反馈接收事务并刷新到磁盘后提交交易。一旦从奴隶的反馈是收到的结果是由主反馈回客户端。

在after_commit模式,如果奴隶没有应用程序日志,然后主人崩溃,系统切换到奴隶,APP会发现数据不一致,主提交,和奴隶不适用。