代码改变世界

【MySQL】如何对MySQL复制性能做基准测试

2022-07-30 16:02  abce  阅读(152)  评论(0编辑  收藏  举报

有很多工具可以用来测试MySQL的性能。比如:

sysbench – https://github.com/akopytov/sysbench
BMK-kit – http://dimitrik.free.fr/blog/posts/mysql-perf-bmk-kit.html
mysqlslap – https://dev.mysql.com/doc/refman/8.0/en/mysqlslap.html
LinkBench – https://github.com/facebookarchive/linkbench

不过,大多数工具都是针对单个MySQL实例。如果你想测试MySQL复制的性能,还需要做额外的工作。

 

1.复制是否可以追上源库

为了回答这个问题,需要在主库上运行负载,并监控复制是否有延迟。可以通过show replica status、show slave status来监控,尤其是关注Seconds_Behind_Source和Seconds_Behind_Master的值。也可以通过pmm的MySQL Replication Summary页面的MySQL Replication Lag图表查看。 

 

更高级的是检查比较Exec_Source_Log_Pos(Exec_Master_Log_Pos), Relay_Log_File和Read_Source_Log_Pos ( Read_Master_Log_Pos ),Source_Log_File。因为Seconds_Behind_Source会受长时间运行命令的影响,返回的值会不准。

 

你可以调优从库,通过开启并行复制来减少延迟。

 

2.从库在应用日志的时候是否可以提供查询

一旦对复制延迟还能接受,就可以开始在从库添加负载并测试其性能。例如,如果计划使用从库来处理只读查询,则可以在其上运行只读基准测试。你需要观察只读基准和复制延迟的性能。

 

如果计划在从库上运行分析查询:先测试。如果计划使用此从库进行备份:进行备份并测量它将如何影响复制的性能。

 

3.同步复制

提供同步的方案有:Galera,Percona XtraDB Cluster(PXC),Group Replication,这些方案受到流控制停止时间(flow control paused time)的影响。

对于PXC/Galera集群影响,可以使用pmm进行监控flow control paused time。也可以监控变量:wsrep_flow_control_paused

对于MGR,你可以监控performance_schema.replication_group_member_stats表中的COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE列,该列显示了从库的队列中有多少个事务在等待。也可以查看pmm中的MySQL Group Replication界面的Replication Lag图表。

 

4.最好的测试是你的生产环境

虽然很难在接受用户写入的服务器上创建这样的基准,但对于从来说,它相对容易。你需要做的就是创建生产服务器的从库,但尚未使其可用于应用程序。 

首先,观察它是否可以在空闲时处理复制延迟,然后开始向它添加负载。也可以使用ProxySQL的镜像功能;但是,需要检查本文中描述的某些限制是否仍然适用。

 

5.从库多久能追上主库

你可能想要测试的另一件事是,在复制更新延迟后,从库恢复的速度有多快。

要执行此测试,请在运行主库的负载时停止副本,在一定时间后重新启动它,并观察复制延迟。如果你正在测试提供只读负载的从库,请继续进行负载测试。

 

好执行停止、等待和启动一系列命令,这样就可以控制从库停止的时间。例如,要停止从库一小时,请使用以下命令:

stop replica;
select sleep(3600);
start replica;

然后等待,直到复制运行:

SELECT SERVICE_STATE FROM performance_schema.replication_applier_status;

该查询返回on结果后,启动监控Seconds_Behind_Source的值,直到变成0,并记录下时长。

 

最后

可以使用推荐用于单个MySQL Server的相同基准测试工具来针对复制设置执行性能测试,只需要监控复制延迟和其他性能特征。