一、前言

开篇先说明下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之group_replicatio

MGR之group_replication_consistency性能测试_MGR之group_replicatio_02

 

 

 

 

 

2、QPS

MGR之group_replication_consistency性能测试_MGR之group_replicatio_03

MGR之group_replication_consistency性能测试_MGR之group_replicatio_04

 

3、95%rt

MGR之group_replication_consistency性能测试_MGR之group_replicatio_05

MGR之group_replication_consistency性能测试_MGR之group_replicatio_06

 

三、结论

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