一、前言

 

开篇先说明下MGR中group_replication_consistency参数的意义group_replication_consistency是MySQL 8.0.14为解决MGR中一致性读提供的参数,分为以下5种可选值:

 

  • EVENTUAL:开启该级别的事务(T2),事务执行前不会等待先序事务(T1)的回放完成,也不会影响后序事务等待该事务回放完成
  • before:开启了该级别的事务(T2),在开始前首先要等待先序事务(T1)的回放完成,确保此事务将在最新的数据上执行。
  • AFTER:开启该级别的事务(T1),只有等该事务回放完成。其他后序事务(T2)才开始执行,这样所有后序事务都会读取包含其更改的数据库状态,而不管它们在哪个成员上执行
  • BEFORE_AND_AFTER:开启该级别等事务(T2),需要等待前序事务的回放完成(T1);同时后序事务(T3)等待该事务的回放完成
  • BEFORE_ON_PRIMARY_FAILOVER:在发生切换时,连到新主的事务会被阻塞,等待先序提交的事务回放完成;这样确保在故障切换时客户端都能读取到主服务器上的最新数据,保证了一致性

 

为了测试改参数对实际MGR集群性能的影响,进行了不同模式下的标准压测,由于本次测试MGR集群是Multi-master模式,因此,没有测试BEFORE_ON_PRIMARY_FAILOVER(针对Single-primary模式起作用)

 

二、测试

测试说明:

MGR集群:3节点 Multi-Master模式
8C16G
普通SATA盘,IOPS在1000出头点
ibp:11.5G
测试表数:40
表数据量:1000000

 

三、测试数据及结果

1、TPS
MGR之group_replication_consistency性能测试_MGR

 

MGR之group_replication_consistency性能测试_MGR_02

 

2、QPS
MGR之group_replication_consistency性能测试_MGR_03

 

MGR之group_replication_consistency性能测试_MGR_04

 

3、95%rt
MGR之group_replication_consistency性能测试_MGR_05

 

MGR之group_replication_consistency性能测试_MGR_06

 

四、结论

 

  1. 从测试结果上来看,默认eventual的性能是最好的,这也是可以预知的,因为该模式下,后续事务不需要管前面事务是否应用,也不需要在所有节点apply以后再提交,只需要在超过半数节点冲突检测通过以后即可提交
  1. before模式下,在不同线程下,性能均有小幅下降,相比eventual模式下降约10%左右
  1. 而after模式下,MGR性能下降非常严重,并且在8线程以后基本达到上限,而且随着线程数的加大,响应时间也随之加大,在64线程下,after模式性能基本为eventual模式的1/5不到,可见性能下降非常严重
  1. before_and_after模式性能基本与after模式持平
  2. 因此,在生产环境中,需要在数据一致性跟性能之间做好权衡,在数据一致性高的场景下可以设置session级别的group_replication_consistency,而无需设置全局